2010-12-17 53 views
163

我有另一個這樣的「無法加載文件或程序集或它的一個依賴項」問題。無法加載文件或程序集或它的一個依賴項

其他信息:無法加載 文件或組件 'Microsoft.Practices.Unity, 版本= 1.2.0.0,文化=中性 公鑰= 31bf3856ad364e35' 或一個依賴的 之一。位於 程序集清單定義 與程序集引用不匹配。 (異常來自HRESULT:0x80131040)

我不知道是什麼原因造成這種或如何,我可以調試它自己身上找原因。

我已經做了搜索我的解決方案目錄的.csproj文件,每一個地方我有團結,我有:

參考 包括=「Microsoft.Practices.Unity, 版本= 2.0.414.0文化=中性, 公鑰= 31bf3856ad364e35, ProcessorArchitecture用於= MSIL」

找不到任何地方的任何引用這在我的任何項目違背1.2.0.0。

任何想法我應該如何去解決這個問題?

我也希望提示如何調試這樣的問題。

+1

可以在任何你引用的程序集是在舊'Unity'庫使用了一些東西? – decyclone 2010-12-17 11:19:33

+3

也許......但我怎麼才能找到哪個程序集?我的解決方案中有很多項目和很多潛在的嫌疑人......反覆試驗和錯誤bruteforce看起來有點沒有希望...... – ronag 2010-12-17 11:21:47

+0

您只需查看項目中引用的程序集就會發現此錯誤。 – decyclone 2010-12-17 11:26:17

回答

86
  1. 檢查您是否引用一個反過來引用舊版本統一的程序集。例如,假設你有一個名爲ServiceLocator.dll的程序集,它需要一箇舊版本的Unity程序集,現在當你引用ServiceLocator時,你應該提供它的舊版本的Unity,這就產生了問題。

  2. 可能是所有項目構建其裝配體的輸出文件夾,具有舊版本的統一性。

您可以使用FusLogVw找出誰是裝載舊組件,只是定義路徑日誌,並運行您的解決方案,然後再檢查(在FusLogvw),其中統一裝配裝在第一線,雙擊它並看到調用程序集,然後在這裏。

+3

FuseLogVw的日誌文件在哪裏 – Stiger 2014-08-01 03:41:30

+1

爲了避免必須查找日誌文件,可以指定一個自定義日誌路徑:設置,勾選啓用自定義日誌路徑複選框,輸入自定義日誌路徑,刷新。 – RedGreenCode 2015-01-21 19:46:13

36

嘗試清理解決方案中的調試和發佈文件夾。然後刪除並再次添加統一。

+2

這個問題可能是由很多事情造成的......您的解決方案解決了我的問題,並可能解決其他問題。 – 2011-09-29 01:19:27

+1

@ScottRippey這對我有用。我首先刪除了所有的.pdb文件,然後重新加載我的項目並重建它。 – botenvouwer 2014-02-12 08:26:39

+0

非常感謝阿列克謝,爲我創造了奇蹟。我玩這個太久了。 – Jmnstr 2015-08-06 18:03:33

3

你說你在解決方案中有很多項目......好吧,從一個靠近構建順序的頂端開始。獲得一個構建,一旦你發現它,你可以對其餘的應用相同的修復。

老實說,你可能只需要刷新你的參考。這聽起來像是你更新了你的版本並且沒有更新引用,或者如果你將你的解決方案保存在源代碼控制中,這是一個相對路徑問題。只要驗證你的假設,並重新添加參考。

39

對我來說,其他的解決方案都沒有工作(包括清理/重建戰略)。我發現了另一種解決方法,即關閉並重新打開Visual Studio以關閉

我想這迫使Visual Studio重新加載解決方案和所有項目,重新檢查過程中的依賴關係。

+16

如果你不相信這會起作用,至少試試。直到我做完,我都無法相信它。 – 2015-01-27 13:40:10

+2

啊,你重新開始舞吧。 – 2017-05-30 07:15:48

+1

爲我工作... – juFo 2018-03-02 08:53:29

4

不知道這是否有幫助。

檢查組件名稱中的組件名稱和默認命名空間是否匹配。這解決了我的問題,產生了相同的錯誤。

12

微軟企業庫(引用.NetTiers)是我們的問題,它反過來引用了舊版本的Unity。爲了解決這個問題,我們使用以下綁定重定向在web.config:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
       <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
       <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

或者,你可能只想更新企業庫到最新版本。

14

以下爲我工作。

  • 刪除臨時文件C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \臨時ASP.NET文件
  • 關閉VSTS並重新打開
  • 刪除和添加相同的DLL(注意:添加相同的匹配版本)
1

您必須從您的輸出文件夾中刪除您的appname.dll文件。 清理調試和發佈文件夾。 重建並複製到輸出文件夾重新生成的dll文件。

2

I 「設置爲啓動項目」卸載/未啓動的庫/項目。

然後部署它。

它的工作!

我認爲它找不到.dll,因爲它一開始並不在組件中。

4
  • 轉到:解決方案 - >
  • 點擊高級標籤(查看下面的頁面)
  • 添加您DLL附加組件(這樣我們可以添加外部DLL在共享點)。
+5

我沒有在我的VS2010項目中的「解決方案 - >包」 – Muflix 2015-07-01 14:11:11

58

打開IIS管理器

選擇應用程序池

然後選擇您使用的

去高級設置池(在右側)

變化的標誌啓用32位應用程序false爲true。

+0

IIS - >選擇每個ApplicationPool - >基本設置 - >檢查是否在「.NET Framework版本」下拉菜單中選擇了最新的框架 – Martin 2013-11-19 06:58:28

+0

這對我很好用 – Saravanan 2014-09-02 17:55:09

+0

你也可以在VS中右鍵點擊你的項目。並刪除偏好的32位複選標記 – 2014-10-12 06:57:09

1

如果您通過在Windows XP上打開應用程序來獲取此錯誤消息,這意味着首先安裝了該應用程序,原因是沒有使用網絡框架4和Service Pack 3,該應用程序無法正常工作。你安裝了兩個,然後再次出現這個錯誤,所以你應該重新安裝該應用程序,但首先從添加和刪除卸載

如果這不起作用請不要濫用我。我也是一個初中

1

好吧,這可能聽起來很愚蠢,但繼承人嘗試了其他解決方案後,如何解決這個問題,並在這個愚蠢的事情上度過一個夜晚。

我收到了一些DLL文件夾丟失的錯誤。 我試圖刪除,從Team Foundation Server取回所有的東西,但沒有奏效。 從我的office-matelocal機器中獲取了Bin文件夾的副本,並將其替換。它也沒有工作。 最後,我手動FTPed服務器,得到了顯示爲丟失的DLL的副本,然後它開始顯示文件列表序列中的下一個文件丟失。

所以我ftped服務器得到所有Bin文件夾,手動逐個替換每個文件。 (不Ctrl +全部和替換..我試過:它沒有工作。) 並以某種方式它的工作...

0

我有這個問題,其實很愚蠢的錯誤。 我已經爲.dll文件指定了錯誤的位置,將位置更改爲正確的位置後,加載正確發生(回答所以別人不會犯這個錯誤)。

5

我有類似的問題。 Junto答案將解決問題但你應該注意一個重要的提示!

在統一版本2.1.505.2不同的AssemblyVersion的AssemblyFileVersion設置:

enter image description here

的AssemblyFileVersion所使用的NuGet但CLR不關心的AssemblyFileVersion,它將只使用AssemblyVersion

所以對於版本2.1.505.2重定向應適用於在的AssemblyVersion指定版本:2.1.505.0

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" /> 
</dependentAssembly> 
</assemblyBinding> 

參見: What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?

1

另一個可能的原因:確保你並沒有在項目屬性中意外給出兩個項目相同的程序集名稱。

1

以下爲我工作。

  • 刪除臨時文件C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP。在臨時文件Asp.net文件NET
    • 然後右鍵單擊>屬性>安全 分給IIS和所有用戶完全控制訪問乳寧我的項目
8

檢查web.config /應用.config文件在您的項目中。看看版本號是否正確。

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" /> 

這對我有效。

+1

這對我來說雖然它是web.config,而不是app.config – samneric 2018-01-12 02:50:23

1

我對.NET 4.0解決方案,使用企業庫5,是添加引用:

Microsoft.Practices.Unity.Interception.dll

1

感謝Riddhi M. 繼爲我工作。

刪除臨時文件C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \臨時ASP.NET文件 關閉VSTS並重新打開 刪除和添加相同的DLL文件(注:您添加相同的匹配版本)

4

我也有這種可怕的錯誤,並發現了一個解決方案...

  1. 右鍵單擊解決方案名稱
  2. 單擊清理解決方案
  3. 重新啓動Visual Studio
  4. 轉到項目屬性>>構建
  5. 變化配置發佈
  6. 開始調試(F5)

1),2)

Right Click on the Solution name

4),5)

Change Configuration to Release

希望這將有助於你還。

3

在我的情況下在bin文件夾中是一個名爲Unity.MVC3的非參考dll,我試圖在visual studio中搜索對此的任何引用而沒有成功,所以我的解決方案非常簡單,就像從bin文件夾中刪除該dll一樣。

1

注意有衝突的參考文獻。即使在清理和重建之後,衝突的引用仍然會導致問題。我的問題是在AForge和Accord之間。我刪除了兩個引用,並重新添加引用,重新選擇特定的引用(特別是對於我的案例,只是雅閣)。

1

對於我重建不使用Unity C#Proects Checkmark工作的統一遊戲。

9

在99%無法加載文件或程序集或其依賴項之一問題是由依賴項引起的!我建議你遵循這個步驟:

  1. 下載的Dependency Walkerhttp://www.dependencywalker.com/

  2. 啓動的Dependency Walker並打開DLL(在我的情況NativeInterfaces.dll

  3. 你可以看到一個或更多的DLL與錯誤紅色錯誤打開文件...

  4. 這意味着你的系統中缺少這個DLL;在我的情況的DLL名稱是MSVCR71.DLL

  5. 您可以下載missings從谷歌DLL和在正確的道路複製(在我的情況c:\windows\system32

  6. 在這一點上,你必須在GAC註冊新的DLL(全局程序集緩存):打開DOS終端並寫入:

    cd \Windows\System32 
    regsvr32 /i msvcr71.dll 
    
  7. 重新啓動您的應用程序!

+8

依賴沃克是偉大的,但從互聯網上隨機的DLL複製到Windows是不太好。最好嘗試找到提供這些DLL的安裝程序。 – RJFalconer 2016-10-13 12:34:39

+0

沒有爲我顯示任何內容。 – 2017-01-18 23:02:16

1

在我的情況下,沒有一個建議的答案奏效。

這裏是我工作:

  1. 取出參考
  2. 重命名的DLL
  3. 進口再次

第二步是重要的顯然是沒有工作的參考沒有它。

1

嘗試檢查引用的「複製到本地」屬性是否設置爲true,並將特定版本設置爲true。這與Visual Studio中的應用程序有關。

0

我的解決辦法是:

我有一個三層應用我也忘了,在IIS也複製DLL到正確的道路。剛把它複製到正確的地方,它爲我工作。

4

screenshot在解決方案資源管理器右鍵單擊項目(不是解決方案),在構建選項卡中選擇平臺目標:「任何CPU」。

2

這個問題發生在我身上,其中一個依賴庫正在編譯一個帶有「任何CPU」的DLL,當父庫期望編譯「x64」時。

0

我一直在Visual Studio 2015中的Web窗體項目中出現這個錯誤。我關閉Visual Studio,並殺死了ScriptedSandbox64.exe,Microsoft.VsHub.Server.HttpHostx64.exe,Microsoft.VsHub.Server.HttpHostx.exe * 32,Microsoft.VisualStudio.Web.Host.exe * 32進程,它似乎幫助解決問題。

0

我這有今天,在我的情況下,這個問題是非常奇怪:

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" /> 
    </dependentAssembly>0. 

注意在XML結束流浪人物 - 不知何故那些已經從版本號轉移到年底這塊XML!

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> 
    </dependentAssembly> 

更改爲上述和瞧!一切都有效。

5

儘管5年前發佈的原始問題仍然存在,並且相當煩人。

通用解決方案是對所有引用的程序集進行全面分析,以瞭解發生了什麼問題。爲了使這個任務更容易,我製作了一個工具(一個Visual Studio擴展),它允許選擇一個.Net程序集(.ddl或.exe文件),並獲取所有引用程序集的高亮衝突或遺漏引用的圖形。

該工具可在Visual Studio庫:輸出https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

例子: enter image description here

+0

不適用於Visual Studio的社區版本 – 2017-09-08 18:29:39

+0

我認爲應該有另一個問題,與Visual Studio版本無關。我測試了VS 2017和VS 2015社區版本的擴展。其實它是通過VS 2017社區版開發的。 – marss 2017-09-09 19:22:20

+0

啊哈。你有沒有安裝其他擴展程序?此頁面說明VS社區不支持DGML:https://msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport – 2017-09-09 20:17:03

相關問題