.net-assembly 解析

.net-assembly resolution

我正在研究程序集,搜索后对某些点感到困惑我在这里提问。我读到有关程序集解析的内容,对于强命名程序集,程序集解析的顺序是首先检查 GAC,然后是根目录,然后是私有探测。
假设我有一个包含多个项目的解决方案,并且在这个文件夹中有一个文件夹可以放置所有参考程序集让我们说 log4net 并且在我需要使用 log4net 程序集的项目中我添加了 log4net dll 的引用指向应用程序解决方案目录中的文件夹所有已放置引用的 dll。那么,为什么 CLR 检查 GAC,然后检查根目录等,为什么不从添加引用时提到的路径中检查。

当你说 "add reference to this" 时,我认为你的意思是 "in Visual Studio"。

当您 运行 在不存在此路径的计算机上运行程序时会发生什么情况?

顺便说一句。 visual studio 中的 "Add reference" 仅在编译时使用。它将引用的 dll 复制到目标文件夹。

Visual Studio 在项目文件夹中创建一个目标文件夹(标准 bin\Debug 或 bin\Release),并将所有文件(exe、dll、config)存储在那里以进行部署。

将 DLL 安装到 GAC 中必须手动完成,并且只有当它是一个被多个应用程序使用的 DLL 时才有意义,并且应该谨慎使用。

当您的应用程序从 GAC 加载一个 dll 并且此 dll 具有您的应用程序所期望的另一个版本时,您可能会感到奇怪且难以发现错误。