-2

比较下面同一类的两个实例。该变量instanceA是使用反射创建的,instanceB而是使用对我的 VS2012 项目中的 DLL 的直接引用创建的。

var a = Assembly.Load(File.ReadAllBytes(@"C:\MyFilePath.dll"));
var t = a.GetType("Namespace.MyClassType");

var instanceA = Activator.CreateInstance(t);
var instanceB = new Namespace.MyClassType();

问题?这些是不平等的instanceA和中的字段instanceB不同。目前我的代码正在运行,只要我使用instanceB. 但是,如果我仅将字母“B”更改为“A”,则生成的对象会有所不同,这会在稍后阶段破坏产品。

正如您可能理解的那样,我的任务是使用反射而不是参考。我已经确认正在调用正确的构造函数。

4

1 回答 1

2

问题是您有不同的程序集-在一种情况下,您仅从字节数组(恰好存储在磁盘上MyFilePath.dll)加载了程序集,而在另一种情况下,您指的是加载到的程序集由于项目中的引用而导致的 AppDomain。

目前还不清楚你的上下文什么(不同的程序集在哪里等),但你应该看看你是如何加载程序集的——这是它的症结,而不是Activator.CreateInstance部分。

于 2013-10-02T14:08:41.020 回答