|
|
|
@ -217,6 +217,30 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
@@ -217,6 +217,30 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static IAssemblyModel CreateAssemblyModelFromFile(string fileName) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
var loader = new CecilLoader(); |
|
|
|
|
loader.IncludeInternalMembers = true; |
|
|
|
|
loader.LazyLoad = true; |
|
|
|
|
var assembly = loader.LoadAssemblyFile(fileName); |
|
|
|
|
|
|
|
|
|
IEntityModelContext context = new AssemblyEntityModelContext(assembly); |
|
|
|
|
IAssemblyModel model = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(context); |
|
|
|
|
if (model is IUpdateableAssemblyModel) { |
|
|
|
|
((IUpdateableAssemblyModel)model).Update(EmptyList<IUnresolvedTypeDefinition>.Instance, assembly.TopLevelTypeDefinitions.ToList()); |
|
|
|
|
((IUpdateableAssemblyModel) model).AssemblyName = assembly.AssemblyName; |
|
|
|
|
} |
|
|
|
|
return model; |
|
|
|
|
} catch (BadImageFormatException) { |
|
|
|
|
SD.MessageService.ShowWarningFormatted("{0} is not a valid .NET assembly.", Path.GetFileName(fileName)); |
|
|
|
|
} catch (FileNotFoundException) { |
|
|
|
|
SD.MessageService.ShowWarningFormatted("{0} is not accessible or doesn't exist anymore.", fileName); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static IAssemblyModel CreateAssemblyModelOrThrowException(string fileName) |
|
|
|
|
{ |
|
|
|
|
var loader = new CecilLoader(); |
|
|
|
|
loader.IncludeInternalMembers = true; |
|
|
|
@ -235,7 +259,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
@@ -235,7 +259,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
|
|
|
|
|
static IAssemblyModel SafelyCreateAssemblyModelFromFile(string fileName) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
return CreateAssemblyModelFromFile(fileName); |
|
|
|
|
return CreateAssemblyModelOrThrowException(fileName); |
|
|
|
|
} catch (Exception) { |
|
|
|
|
// Special AssemblyModel for unresolved file references
|
|
|
|
|
IEntityModelContext unresolvedContext = new UnresolvedAssemblyEntityModelContext(Path.GetFileName(fileName), fileName); |
|
|
|
|