【问题标题】:How does CLR load a file from an assembly?CLR 如何从程序集中加载文件?
【发布时间】:2023-03-02 23:51:01
【问题描述】:

下面是一个多文件程序集,由两个托管模块组成,一个带有清单:

所以 RUT.netmodule(RUT 代表罕见的使用类型)是一个文件(.netmodule),它是程序集的一部分。

假设我的客户端应用程序引用了来自RUT.netmodule 的类型,而MultiFileLibrary.dll 是一个强名称程序集,它安装在GAC 中。 因为RUT.netmodule实际上并不存在于MultiFileLibrary.dll,所以GAC不会有RUT.netmodule

所以我的问题是,也许 CLR 被配置为检查应用程序的基目录以在知道引用的类型在不同的模块文件中之后查找 RUT.netmodule。但这也意味着RUT.netmodule 必须始终位于应用程序的基目录中,这对我来说听起来很奇怪,好像我有多个应用程序然后我需要在它们的基目录中拥有多个RUT.netmodule。是否可以在 GAC 中“安装”RUT.netmodule,或者在 GAC 中安装 MultiFileLibrary.dll 时,任何 .netmodule 文件也会被复制到 GAC 中?

【问题讨论】:

标签: c# .net clr .net-assembly


【解决方案1】:

我从未使用过多文件程序集,但据我所知,您应该能够使用程序集链接器工具 (al.exe) 对 .net 模块进行签名。 documentation 包含一个可能相关的小引号:

如何:使用强名称为程序集签名
...

  • 通过使用程序集链接器 (Al.exe) 将 .NET Framework 代码模块(.netmodule 文件)与密钥文件链接。

我的猜测是,即使您将程序集放在 GAC 中,它仍然会引用 .netmodule,并且如果 .netmodule 已签名,它应该可以工作。 希望这些信息对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 2011-02-07
    • 2015-05-24
    • 2010-12-29
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多