2012-02-09 384 views
61

我一直在調查這一點,現在還沒有得到解決。我收到以下錯誤信息:錯誤CS1705:「其版本高於引用的程序集」

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral, 
PublicKeyToken=bfde95ba233094b2' uses 
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 
which has a higher version than referenced assembly 
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll: 
(Location of symbol related to previous error) 

Web服務器正在運行Server 2003的我到C:\ WINDOWS \組裝和事實上的通知做,有上市Common.dll的3個版本。列出的最高版本是3.3.4269.17112

我將版本號爲:3.3.4273.24368的dll複製到彙編目錄中。然後我重新編譯並重新部署了我的代碼(可能是過度殺毒,但是哦)。當我在新會話中打開瀏覽器並再次訪問網站URL時,我仍然收到相同的消息。

我可以使用Windows資源管理器,並驗證更高版本的Common.dll現在也列出。

還有什麼可以解決這個問題?我不想將我的程序集中的引用更改爲指向舊版本。

+2

瘋狂的'*。*'版本號。重建一切,只有這樣才能確定。 – 2012-02-10 01:30:36

回答

26

3想法,你試試:

  1. 確保您所有的DLL是針對同一版本通用的編譯。
  2. 檢查您的解決方案中是否有項目引用,而不是文件引用。
  3. 使用binding redirections在你的web.config
+0

鏈接到綁定重定向不再起作用.... – moudrick 2018-01-11 10:06:00

30

(除的Jakub的想法)

我有這個錯誤,因爲 「重建」 是不是真的重建。
關閉Visual Studio,真的去刪除bin文件夾,然後重建,它可能會更好。

此外,有時Visual Studio謊言的參考,因此檢查您的.csproj文件HintPath

+0

這個人保存了我的培根。本地運行很好,但我發表了一個改變,事情變得古怪。刪除聯機bin文件夾的內容會迫使事物重新同步。謝謝! – pStan 2014-02-26 03:16:48

2

轉到參考,並添加一個新的dll文件引用問題,並確保您的所有dll都編譯爲相同的版本。它適用於我,我希望它也適用於你。

25

我的問題是,我有2個項目引用2不同版本的相同DLL的不同副本。我通過刪除它們並確保它們引用相同的dll文件來修復它。

1

我們的團隊在我們的構建環境中遇到了這個問題。該問題是由於.csproj文件的<HintPath>元素的差異造成的。

我們常見的程序集有一個正確的相對路徑到包含我們的引用程序集的目錄。從屬程序集具有來自以前目錄結構的路徑。該解決方案在開發機器上成功編譯,因爲GAC解決了依賴者對C:\ Program Files中安裝的正確版本的引用。構建環境具有程序集的遺留安裝(即使它應該沒有),它會回落並因此出現錯誤。在文本編輯器中更新<HintPath>可以解決問題。

-3

我有一個類似的問題,我創建了一個DLL,即A.dll,它引用了其他DLL,即B.dll。

我創建了一個應用程序C.exe和引用的DLL A.dll和B.dll。

解決方案 - 從c.exe中刪除B.dll的引用,我能夠解決這個問題。

希望這會有所幫助。

10

一個可能的原因是,第二個程序集安裝在GAC中,而第一個程序集具有較高的版本號,將被添加到項目的引用。要驗證這一點,請雙擊項目引用中的程序集,然後檢查在對象瀏覽器中是否有另一個具有相同名稱的程序集。

如果是這種情況,請使用gacutil.exe實用工具從GAC中卸載第二個程序集。例如,如果這些都是64位的組件:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name> 
+0

兩年後,你的建議就像一個魅力。在對象瀏覽器中查看引用對它進行排序。 – ceebreenk 2014-10-13 19:59:27

15

如果您使用的NuGet值得一去「管理的NuGet軟件包的解決方案」,發現這是造成問題,打更新包。然後它應該將所有包裝升級到最新版本並解決問題。

值得一試,因爲它是一個快速和容易。

+0

這爲我解決了,謝謝。雖然我的情況稍有不同:它沒有在更新中列出,所以我不得不去安裝,並且有一個窗口顯示了每個項目的軟件包版本。我正在升級一些舊的模塊到一個新版本的cms,所以我不得不去問題包,選擇它們並點擊安裝。可能是因爲cms剛剛更換爲使用nuget,但您爲我節省了大量繁瑣的'csproj'編輯工作! – rtpHarry 2016-04-21 16:06:33

+0

確保在解決方案級別而不是項目級別更新NuGet包。 – Jess 2017-02-10 20:42:19

+1

這當然應該是一切可以接受的答案,我沒有讀到這個,而是無意中在我的解決方案中嘗試過,它像魅力一樣工作。 – baymax 2017-03-22 16:42:31

0

有類似的問題。我的問題是,我在同一個解決方案中有幾個項目,每個項目都引用了特定版本的DLL,但是有不同的版本。解決方法是在所有引用的所有屬性中將「特定版本」設置爲false。

0

我知道一段時間之前,在嘗試完成上述某些步驟之後,很多人都問過這個問題。幫助我的是以下步驟和this article

我找到了引用並將PublicKeyToken從引用的引用更改爲舊引用。

我希望這也有幫助。

0

在您的項目中找到禁止標記System.Web.Mvc檢查版本。

之後右鍵referances - >組件和搜索system.web.mvc和設置它。

問題導致這些程序集的不同版本

編輯:比選擇管理的NuGet包和安裝更新 (如果你有多個項目更新安裝到它們也。)

重要更新是Microsoft.AspNet.MvcMicrosoft.Net.Compilers別忘了它!

0

手工dll的文件夾集合
如果溶液具有不同的庫
libsourcelibs等,爲DLL的文件夾垃圾
如果您在Visual Studio中打開解決方案(第一次),則可能會遇到此問題。而你的DLL的收集文件夾以某種方式被錯過或具體的dll文件丟失。

Visual Studio會默默地嘗試用dll自己的參考替代某些東西。如果VS會成功,那麼新的參考將持續用於您的本地解決方案。不適用於其他克隆/結帳。

I.e.您的<HintPath>將被忽略,並且您的項目文件(.csproj)將不會更改。
正如我

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath> 
</Reference> 

DocumentFormat.OpenXml的例子將從C:\Program Files (x86)\Open XML SDK\V2.5\lib無法從solution\..\lib文件夾中被引用。

快速解決方法

  • 檢查和恢復你的DLL從Solution Explorer中收集文件夾
  • 卸載項目,然後刷新項目

right解決方法將遷移到NuGet包管理器。

0

對於SharePoint,請確保在您的根文件夾下,您的DLL沒有「bin」文件夾,如果是這樣,請將其刪除。 (並在VS中將「Copy Local」更改爲false)。

相關問題