当copylocal属性为false时如何从引用dll中获取类型

pas*_*epe 3 c# visual-studio-2005 visual-studio c#-2.0

我需要做类似的事情:

Type CustomType = Type.GetType("instanceName");
Run Code Online (Sandbox Code Playgroud)

它始终返回null。instanceName是一个字符串,表示添加到引用中的dll中包含的类型(copyLocal属性设置为false)。

我也尝试过:

Type CustomType = Type.GetType("instanceName, dllFile.dll");
Run Code Online (Sandbox Code Playgroud)

而且还返回null。

非常感谢

亚历克斯

Dar*_*rov 5

如果程序集已经加载,则可以尝试以下操作:

Type customType = Type.GetType("namespace.typename, assembly");
Run Code Online (Sandbox Code Playgroud)


Mat*_*ott 5

如果您不将程序集部署到 GAC 并且CopyLocal设置设置为false,那么您计划从哪里加载程序集?

如果您计划将程序集部署到驱动器上的固定位置,则可以使用Assembly.LoadFrom:

var assembly = Assembly.LoadFrom(@"C:\Path\To\Assembly.dll");
var type = assembly.GetType("InstanceName");
Run Code Online (Sandbox Code Playgroud)

这允许您加载绝对程序集。如果您使用Type.GetType,它会使用标准融合程序集加载规则来尝试查找匹配的程序集(但如果它不是 GAC'd 或CopyLocal= true),那么它将不会与您的输出一起部署,并将GetType返回 null。

另外,如果您没有在类型名称中指定程序集名称,例如instanceName, assemblyName,而不是instanceName,我相信只会检查当前正在执行的程序集。