在我的项目文件中,我有以下条目:
<Reference Include="Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\..\Libraries\Microsoft.Practices.Unity.dll</HintPath>
</Reference>
以绝对术语转换为:
C:\ dev \ LUT600 2.1.1 \ OCC600 \ Libraries
不知何故,当我尝试编译项目时,Visual Studio会从完全不同的路径加载引用:
/ reference:“C:\ Program Files \ Microsoft Enterprise Library 4.1 - 2008年10月\ Bin \ Microsoft.Practices.Unity.dll。
它如何解析到这个位置是一个完全的谜,因为这个DLL在这个项目的任何地方都没有被引用。
我已将Specific Verion设置为true,但它仍然会解析此位置的引用。
有什么想法吗?
TIA。
克劳斯
答案 0 :(得分:3)
可能是引用与该特定位置的程序集没有相同的版本号,因此它开始在别处搜索以找到“更好”的匹配。
VS不仅仅是获取您指定的文件,而是始终使用探测路径来尝试查找引用的程序集。这通常提供随机“选择具有相同名称的任何东西”的效果。在我们的构建服务器上,我曾经发现了996个程序集。 995是相同的,正确的版本,一个是错误的版本。有一天,我们的构建停止工作,因为没有明显的理由它突然决定使用单一的错误副本!
尝试删除并重新创建参考。这往往有帮助。
在最坏的情况下,从您的PC中删除该程序集的所有副本,但您要链接的版本除外。 (如果可能的话,不会破坏你亲爱的任何东西)
答案 1 :(得分:0)
您很可能添加了GAC(全局程序集缓存)中的引用。需要一段时间才能加载的长引用列表是GAC的引用。尝试删除您的引用,并通过在“添加引用”对话框中浏览到该程序集来重新添加它。
答案 2 :(得分:0)
可能在评估HintPath之前在搜索路径中找到dll。如this post中所述,在HintPath之前有两个地方被搜索。