Tag: createinstance

使用CreateInstance()发现“无法找到类型”错误

我正在尝试在C#项目中的连接实用程序中使用.CreateInstance() ,同时序列化XML。 .Unwrap()用于解包可序列化的返回类型,并获取我正在尝试创建的类型的实例。 String fileToLoad = @”D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model”; String file = Path.GetFileName(fileToLoad); AbstractResponseMessageData response = (AbstractResponseMessageData)Activator.CreateInstance(file, responseName).Unwrap(); 我在@”D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model”程序集@”D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model”加载正常,但由于responseName ARC_LOGONRS中的ARC_LOGONRS类型,我收到以下错误: 方法ConnectUtil.Execute中的错误:无法从程序集RPM_Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null加载类型ARC_LOGONRS 。 现在,这就是我遇到错误的原因: 我确实引用了错误中指定的程序集。 2.我的GAC中没有任何内容覆盖my /Debug文件夹中的.dll。 3.我确保我拥有.dll的正确版本。 4. .dll没有其他依赖项。 5.我的项目和.dll都有相同的目标平台。 6.我知道我正在引用程序集,好像我将ARCLOGON_RS放在我的代码中并将鼠标hover在它上面我看到了 类RPM.Model.Data.ARCLOGON_RS 我可以专注于它来看它的属性。 7.我已经清理并重建了两种解决方案。 8.类型确实有一个公共默认构造函数,类是public。 9. .dll位于参考节点中。 10.我确实将正确的程序集名称作为参数传递。 我的问题是,如果有人知道为什么我的项目可能会抛出这个错误,以及我如何修复它,因为我完全没有诊断。 非常感谢任何帮助。

如何将参数传递给通过Assembly.CreateInstance加载的C#插件?

我现在拥有的(成功加载插件)是这样的: Assembly myDLL = Assembly.LoadFrom(“my.dll”); IMyClass myPluginObject = myDLL.CreateInstance(“MyCorp.IMyClass”) as IMyClass; 这仅适用于具有不带参数的构造函数的类。 如何将参数传递给构造函数?

是否可以在不运行类中的任何代码的情况下创建类的实例? (没有ctor,没有字段初始化)

我创建了一个引入实现接口的第三方插件(DLL)的引擎。 由于我无法控制插入的代码,我希望能够从正确的类(GetTypes循环直到我找到接口类)运行1个特定方法(来自接口)。 由于任何人都可以创建在Activator.CreateInstance上执行的优秀构造函数代码,我可以通过使用FormatterServices.GetUninitializedObject来解决这个问题。 但是,当在类中的字段上初始化代码时,这无济于事。 public class myclass : myinterface { public someotherclass name = new someotherclass() public myclass() { //Unknown code } //I only want this run. public string MyProperty{ get { return “ANiceConstString”; } } } 两种方式(CreateInstance / GetUninitializedObject)的问题是将运行someotherclass的构造函数。 在开始分析我的需求之前。 这仅在初始化引擎时运行以获得一组标准值。 如果此get’er依赖于其他初始化值,则“插件”将被标记为失败,因为没有返回有效值。 如果没有标记为失败,则稍后将使用Activator.CreateInstance()正确加载该类。 所以坚持这个问题:.Net是否支持任何创建100%非初始化类的方法? 更新答案。 我在发布问题之前对此进行了测试。 对于某个其他类不会运行的答案,我已经测试了它,并且它是静态运行的。 public class myclass : myinterface { static […]