2009-10-23 84 views
4

在我的項目文件中,我有以下條目:Visual Studio 2008中解決錯誤的參考

<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 \庫

不知怎的,當我嘗試編譯項目時,Visual Studio加載從完全不同的路徑參考:

/reference:「C:\ Program Files \ Microsoft Enterprise Library 4.1 - October 2008 \ Bin \ Microsoft.Practices.Unity.dll。

它如何解決這個位置是一個完整的謎,因爲這個DLL沒有被引用在這個項目的任何地方。

我已將特定Verion設置爲true,但它仍可解析此位置的參考。

任何想法?

TIA。

克勞斯

+0

重命名C:\ Program Files文件\微軟企業庫4.1 - 2008年10月\斌 到 C:\ Program Files文件\微軟企業庫4。1 - 2008年10月\ Bin_bk 強迫它使用正確的參考,但爲什麼? – 2009-10-23 18:27:12

+0

Unity DLL是否是相同的版本?如果是這樣,它是否在不同的位置找到了相同的文件? – Shiv 2015-03-30 03:03:40

回答

3

這可能是參考不具有相同的版本號在那個特定的位置裝配的,所以它開始尋找其他地方找到一個「更好」的比賽。

VS總是使用一個探測路徑來試圖找到引用的程序集,而不是僅僅採用指定的文件。這通常會提供一個隨機的「挑選具有相同名稱的任何東西」效果。在我們的構建服務器上,我發現了一個程序集996份。 995是相同的,正確的版本,並且一個是錯誤的版本。有一天,我們的版本停止工作,因爲沒有明顯的原因,它突然決定使用單個錯誤的副本!

嘗試刪除並重新創建參考。這通常有幫助。

在最壞的情況下,從您的PC中刪除該程序集的所有副本,但您希望鏈接的版本除外。 (如果可能的話,不會破壞親愛的任何東西)

0

您最有可能添加了來自GAC(全局程序集緩存)的引用。需要一段時間加載的參考文件的長列表是來自GAC的參考。嘗試刪除引用,然後通過在「添加引用」對話框中瀏覽到該程序集來重新添加引用。

+0

這些程序集不在GAC中。我通過瀏覽到特定的文件夾添加它們,但有人VS忽略了這一點。 – 2009-10-23 21:57:08

0

它可能會在評估HintPath之前在搜索路徑中找到dll。如this post中所述,在HintPath之前有兩個地方被搜索到。

  • 來自當前項目的文件 - 由{CandidateAssemblyFiles}指示。
  • $(ReferencePath)屬性來自.user/targets文件。
相關問題