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