assembly.CreateInstance返回null
我正在使用assembly.CreateInstance,并且它返回null,虽然使用它与不同的项目使用相同的DLL文件“汇编文件”很好,你能告诉我何时以及为什么它返回null的原因?请这是紧急的??
编辑
我正在搜索的类型有一个默认构造函数,但它实现了另一个接口,就像这样。 Project1,具有接口A并使包含新类型的DLL让它成为实现A.Project2的typeB,具有相同的接口A并使用“CreateInstance”方法来定位类型typeB,但是这里CreateInstance返回null,有什么建议?
我怀疑它是否适用于此,但有一个边缘情况, CreateInstance
返回null
(即Nullable
),以及一个极端的角落情况( ProxyAttribute
, 这里讨论),其中常规类可以构造为null
。
但更可能的是:
- 它不存在(名称错误,也许)
- 您正在使用
as
,并且未实现接口(可能接口在两个不同的程序集中声明;它们分别计为每个接口中的不同接口,即使名称和名称空间相同)
从编辑中,它听起来像是最后一点; 您应该只定义一次接口,并在程序集之间引用 ,以便其他程序集可以查看(并实现)该接口。
请参阅文档:
http://msdn.microsoft.com/en-us/library/aa329906(v=VS.71).aspx
它返回null,因为找不到您传入的类型。 如果您发布代码,我们可能会更具体!
如果函数找不到指定的类型或者类型没有默认构造函数,则该函数返回null
。 请参阅MSDN上的文档 。
您需要确保您的代码正在寻找正确的程序集并键入正确的位置并且您具有适当的权限。
只是如果由与所请求类型驻留在同一程序集中的类调用Assembly.CreateInstance,它将返回null。 我想.NET人认为你永远不需要做这样的事情,这是一个非常错误的假设。
Assembly.CreateInstance调用必须来自驻留在包含您尝试创建的对象类型的程序集外部的类。
去搞清楚。
作为其他回复的后续跟踪,它也可能发生,因为无法找到(或加载)依赖程序集。 可能的原因包括文件不存在,版本不同,强名称validation,权限等。
您可以尝试使用程序集绑定日志查看器 (fuslogvw)来尝试查看是否存在任何失败的绑定来解决您的问题。
更可靠的方法是使用Activator.CreateInstance
并直接传入类型。