2014-10-02 70 views
0

因此,我清理了ASP.NET MVC項目中的一些DLL引用,我刪除了bin中的DLL並更新了源代碼控制以從源代碼控制中刪除DLL。我現在複製所有關於構建bin的引用,正確的方法。但是,當我運行本地主機我得到的錯誤:奇怪的Microsoft.Owin DLL問題和Nuget

Could not load type 'Microsoft.Owin.Security.AuthenticationDescription' from assembly 'Microsoft.Owin, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. 

於是我開始在服務器(其中網站工作),在比較的DLL,我的本地bin目錄。如果我從服務器複製並替換Microsoft.Own並覆蓋我的本地版本,則網站再次運行,錯誤消失。

的東西是DLL文件的版本是完全一樣的,看下面的屏幕截圖:

enter image description here

左邊是我的本地副本,右邊是從版本服務器。

如果我看看我的ASP.NET MVC網站的參考資料,我看到Microsoft.Own位於: .. \ packages \ Microsoft.Owin.2.1.0 \ lib ** net40 ** \ Microsoft .Owin.dll

,並複製本地設置爲True,見截圖: enter image description here

所以下次我刪除了Microsoft.Owin.2.1.0參考,並嘗試使用微軟的net45版本重新進行添加.Owin.dll代替。所以我瀏覽了.. \ packages \ Microsoft.Owin.2.1.0 \ lib ** net45 ** \ Microsoft.Owin.dll

但是當我去檢查Microsoft.Owin的屬性時,在參考下,路徑仍然 .. \包\ Microsoft.Owin.2.1.0 \ lib中** ** net40 \ Microsoft.Owin.dll

所以我後來去我的csproj文件,看到以下條目:

<Reference Include="Microsoft.Owin.Security, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\packages\Microsoft.Owin.Security.2.1.0\lib\net45\Microsoft.Owin.Security.dll</HintPath> 
</Reference> 

而且在我的web.config我targetFramework是4.5:

<compilation debug="true" targetFramework="4.5"> 

因此,最後,我複製並粘貼在服務器上的Microsoft.Owin.dll,它的作品爲 .. \ packages \ Microsoft.Owin.2.1.0 \ lib ** net40 ** \ Microsoft.Owin.dll和。 \包\ Microsoft.Owin.2.1.0 \ lib中** ** net45 \ Microsoft.Owin.dll

要覆蓋包DLL當我重建被複制和我仍然得到錯誤:

Could not load type 'Microsoft.Owin.Security.AuthenticationDescription' from assembly 'Microsoft.Owin, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. 

再次,如果我複製與本地副本相同版本的Microsoft.Owin.dll,並覆蓋我的本地副本的bin.Microsoft.Owin.dll,我的ASP.NET MVC再次開始工作,直到我建立這當然也是。

+0

嘗試爲每個Katana/OWIN相關包(http://docs.nuget.org/docs/workflows/reinstalling-packages)運行'Update-Package -reinstall '。如果你使用的是NuGet包,你不需要直接添加引用到任何DLL。 – Eilon 2014-10-02 05:52:41

+0

這並沒有工作,雖然 – 2014-10-02 06:07:35

回答

1

首先檢查兩個DLL大小是否一樣?如果大小不同,那麼DLL是不同的。

按照以下步驟操作。

  • 打開項目
  • 刪除DLL。
  • 立即構建項目。你會得到錯誤。
  • 關閉項目
  • 打開項目再次
  • 不要建項目
  • 清潔液
  • 添加DLL和引用
  • 構建項目
  • 您將獲得成功
+0

感謝您的幫助,DLLs是不一樣的大小,我的本地主機項目使用NET40包,我的服務器有NET45,但無論多少種類型我刪除引用,構建,關閉項目,清理解決方案,嘗試和Microsoft.Owin net45的參考總是去net40 – 2014-10-02 07:22:38

0

它有可能在「bin」目錄中的某個程序集文件依賴於加載程序集的錯誤。所以你這樣做請檢查項目引用並清理「bin」目錄。