开发人员
我在开发环境中遇到了一个问题。我创建了一个使用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更新了主项目。