【发布时间】:2016-01-27 11:04:45
【问题描述】:
这是我的问题here 的后续。
我想在不同版本中加载相同的程序集,并从这些程序集中创建多个类型的实例。
这是我所拥有的:
我有一个程序集 asm.dll,其版本(在 AssemblyInfo.cs 中)设置为 1.0.0.0。
然后,我修改了一些代码并将版本增加到 2.0.0.0 并再次构建为 asm.dll。
现在,我有 dir1/asm.dll 和 dir2/asm.dll。
这是我的工作:
assembly = Assembly.LoadFile(assemblyFile);
var types = assembly.GetTypes();
Type type = types.First<Type>(t => t.Name.Equals(backboneMemberClass + "Editor"));
MyObject myObject = (MyObject)assembly.CreateInstance("theClassIWantToInstantiate", false, BindingFlags.CreateInstance, null, new object[] { }, null, null);
问题来了:
如果我使用“dir1/asm.dll”作为程序集文件,上述工作正常:对assembly.CreateInstance(...) 的调用返回我请求的实例。
如果我再次使用“dir2/asm.dll”它仍然可以正常工作。 Assembly.CreateInstance 返回正确的实例。
但是,如果我再次想创建一个我之前已经创建的对象的实例(通过调用 Assembly.CreateInstance),我会收到以下异常:
A first chance exception of type 'System.Exception' occurred in PresentationFramework.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll
我正在加载的类是 .xaml WPF UserControl,异常的 Stacktrace 表明 .xaml.cs 文件中的 InitializeComponent() 正在抛出异常,因为它找不到 .baml 文件。
【问题讨论】:
标签: c# .net version instance .net-assembly