我正在研究集会,并在搜索之后对某些问题感到困惑。我在这里问问题。我读到了关于装配分辨率的问题,对于强命名的装配,装配解决的顺序是首先检查GAC然后检查根目录然后进行私人探测。
假设我有一个包含多个项目的解决方案,并且在这里有一个文件夹放置所有引用程序集让我们说log4net并在项目中我需要使用log4net程序集我添加了log4net dll的引用指向应用程序解决方案目录中的文件夹所有引用的dll已被放置。那么为什么CLR检查GAC然后根目录等为什么不从添加引用时提到的路径。
答案 0 :(得分:1)
当你说“添加对此的引用”时,我认为你的意思是“在Visual Studio中”。
在不存在此路径的计算机上运行程序时会发生什么?
顺便说一下。 visual studio中的“Add reference”仅在编译时使用。它会将引用的dll复制到目标文件夹。
Visual Studio在项目文件夹中创建目标文件夹(Standard bin \ Debug或bin \ Release),并存储所有文件(exe,dll,config)以供部署。
将DLL安装到GAC中必须手动完成,只有当它是由多个应用程序使用的DLL并且应该谨慎使用时才有意义。
当您的应用程序从GAC加载dll并且此dll具有您的应用程序所期望的另一个版本时,您可能会发现奇怪且很难找到错误。