如何查找引用程序集的不正确版本的内容并进行修复



开发人员

我在开发环境中遇到了一个问题。我创建了一个使用EntityFramework和ASP.NET Identity的项目,然后创建了一些其他项目,如WCF服务和引用第一个的WebForms站点。项目编译并运行良好,但当我尝试使用Package Manager控制台中的"更新数据库"来更新我的迁移数据库时,我得到了:

System.Data.Entity.Core.MetadataException:指定的架构不是有效的错误:(0,0):错误0004:无法加载文件或程序集'Microsoft.AspNet.Identity.EntityFramework,版本=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'或其一个依赖关系。找到的程序集的清单定义不匹配程序集引用。(HRESULT异常:0x80131040)

我在每个项目中引用的Microsoft.AspNet.Identity.EntityFramework的版本都是2.0.0.0(我曾用NuGet对其进行过升级)。如何找出谁在寻找旧版本并解决该问题?

我尝试了以下步骤:

  • 手动检查Visual Studio中每个项目的引用。他们都有指定了正确的版本(2.0.0.0)和DLL路径,并且"特定version"属性设置为"False"。

  • 已清除我的AppData和C:\Windows中的"临时ASP.NET文件"。。。

  • 当然清除了整个解决方案(删除的bin和obj文件夹)

  • 手动检查每个*.csproj文件的无效引用

  • 使用NuGet重新安装软件包(更新软件包-包括重新发布-重新安装)

  • 在每个App.config/Web.config:中包含程序集绑定重定向

<runtime>
  <assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.AspNet.Identity.EntityFramework" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
  • 获取融合日志:
***汇编绑定日志条目(2014-04-18@01:10:23)***操作失败。绑定结果:hr=0x80131040。没有可用的描述。从C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll加载程序集管理器在可执行文件C:\Program Files(x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe下运行---下面是详细的错误日志。===预绑定状态信息===日志:DisplayName=Microsoft.AspNet.Identity.EntityFramework,版本=1.0.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35(详细说明)日志:Appbase=file:///C:/Developer/sharp/projects/ShadowServer/DataModel/bin/Debug/日志:初始PrivatePath=NULL日志:动态基=NULL日志:缓存基=NULL日志:AppName=NULL正在调用程序集:(未知)。===日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:C:\Developer\sharp\projects\ShadowServer\DataModel\tmp2BEF.tmp日志:使用主机配置文件:日志:使用C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config中的计算机配置文件。日志:发布策略引用:Microsoft.AspNet.Identity.EntityFramework,版本=1.0.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35日志:GAC查找不成功。日志:正在尝试下载新URLfile:///C:/Developer/sharp/projects/ShadowServer/DataModel/bin/Debug/Microsoft.AspNet.Identity.EntityFramework.DLL.日志:程序集下载成功。正在尝试安装文件:C:\Developer\sharp\projects\ShadowServer\DataModel\bin\Debug\Microsoft.AspNet.Identity.EntityFramework.dll日志:进入下载缓存设置阶段。日志:程序集名称为:Microsoft.AspNet.Identity.EntityFramework,版本=2.0.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35警告:比较程序集名称导致不匹配:主要版本错误:程序集引用与找到的程序集定义不匹配。错误:安装程序失败,hr=0x80131040。错误:未能完成程序集的设置(hr=0x8031040)。探测已终止

对不起,我的英语提前:)

在我的情况下,我得到了以下错误:

无法加载文件或程序集"Microsoft.AspNet.Identity.EntityFramework,版本=2.0.0.0,区域性=中性,PublicKeyToken=31bf3856a364e35"或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。

我意识到我的主要UI启动项目默认有Microsoft.AspNet.Identity.EntityFramework的旧版本。。。(而在另一个数据层项目中,我手动获得了最新的库),所以刚刚从NUGet更新了主项目。

最新更新