2014-10-02 56 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”目录。