无法为当前正在执行的程序集中定义的类型获取Type类的实例

flo*_*ode 2 c# reflection

如何获取Type当前正在执行的程序集中未定义的类型的类实例mscorlib.dll

一)也就是说,我定义一个类类型someType组装CSharpSnapIn.dll,位于E:\CSharpSnapIn.dll,但由于某些原因,当我尝试指定此程序集的绝对路径,我得到一个异常:

Type t = Type.GetType("someType, E:\\CSharpSnapIn.dll"); // exeception
Run Code Online (Sandbox Code Playgroud)

b)我也尝试将目前正在运行的应用程序CSharpSnapIn.dll放入\bin\debug目录中,但我仍然遇到异常:

Type t = Type.GetType("someType, CSharpSnapIn.dll"); // exeception
Run Code Online (Sandbox Code Playgroud)

感谢名单

编辑:

1)我已经声明了另一个类类型someType2(内部CsharpSnapIn.dll),这次它起作用了:

Type.GetType("someType2, CSharpSnapIn");
Run Code Online (Sandbox Code Playgroud)

someType和之间的区别someType2someType实现在外部程序集中声明的接口asmIn,但这不应该导致异常,因为CsharpSnapIn.dll它有引用asmIn?!

2)

请注意,只要程序集解析程序可以找到它,就不需要先加载程序集

换句话说,Type.GetType()首先调用加载程序集然后创建一个Type实例?

3)

必须通过探测找到程序集,因此根据您的第二个示例,它必须位于bin目录中.如果它是具有强名称的程序集,则必须提供所有详细信息.

所以你说我们不能指定使用的绝对路径(到程序集)Type.GetType(),而是汇编需要驻留在bin目录中?

Dar*_*rov 5

您需要先加载程序集:

Type t = Assembly
    .LoadFrom(@"e:\CSharpSnapIn.dll")
    .GetType("SomeNs.SomeType", true);
Run Code Online (Sandbox Code Playgroud)