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

Posted

技术标签:

【中文标题】当copylocal属性为false时如何从引用dll中获取类型【英文标题】:How to getType from a reference dll when copylocal property is false 【发布时间】:2012-06-27 07:16:49 【问题描述】:

我需要做一些类似的东西:

Type CustomType = Type.GetType("instanceName");

它总是返回空值。 instanceName 是一个字符串,它表示添加到 References 的 dll 中包含的类型(将 copyLocal 属性设置为 false)。

我也试过了:

Type CustomType = Type.GetType("instanceName, dllFile.dll");

但也返回 null。

非常感谢

亚历克斯

【问题讨论】:

【参考方案1】:

如果程序集已经加载,你可以试试这个:

Type customType = Type.GetType("namespace.typename, assembly");

【讨论】:

【参考方案2】:

如果您没有将程序集部署到 GAC 并且 CopyLocal 设置设置为 false,那么您打算从哪里加载程序集?

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

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

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

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

【讨论】:

谢谢,这不是我正在搜索的,但它是一个很好的解决方案:)

以上是关于当copylocal属性为false时如何从引用dll中获取类型的主要内容,如果未能解决你的问题,请参考以下文章

如何设置输出子文件夹以在构建时将引用 dll 复制到

从命令行启动应用程序时,如何将 Spring Boot 应用程序 jar 中的文件作为 -D 属性值引用?

项目中引用的程序集名称但相同版本不可用

当属性值来自引用表时,应该如何填充实体(bean)对象属性?

如何通过js实现当点击查询时其他按钮设置为disabled=false

当控件的 IsEnabled 为 false 时如何设置通常的背景 [关闭]