各位开发者,
我在我的开发环境中遇到了一个问题。我创建了一个项目,使用了EntityFramework和ASP.NET Identity,然后创建了一些其他的项目,比如WCF服务和引用第一个项目的WebForms站点。这些项目编译并工作良好,但是当我尝试在包管理器控制台中使用"Update-Database"来更新我的迁移启用数据库时,我得到以下错误信息:
System.Data.Entity.Core.MetadataException: Schema specified is not valid. Errors: (0,0) : error 0004: Could not load file or assembly 'Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
我在每个项目中引用的Microsoft.AspNet.Identity.EntityFramework的版本都是2.0.0.0(我曾经使用NuGet升级过它)。如何找出是谁在查找旧版本并解决这个问题呢?
我尝试了以下步骤:
在Visual Studio中手动检查每个项目的引用。它们都指定了正确的版本(2.0.0.0)和DLL路径,并将"Specific version"属性设置为"False"。
清除了我的AppData和C:\Windows...中的"Temporary ASP.NET Files"
当然,也清除了整个解决方案(删除了bin和obj文件夹)
手动检查每个*.csproj文件中是否存在无效的引用
使用NuGet重新安装包(Update-Package -includePrerelease -reinstall)
在每个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>
- 获取了Fusion日志:
***程序集绑定日志记录 (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 ---跟随一个详细的错误日志。
=== 预绑定状态信息 === LOG: DisplayName = Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35(完全指定) LOG: Appbase = file:///C:/Developer/sharp/projects/ShadowServer/DataModel/bin/Debug/ LOG: Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = NULL 调用程序集:(未知)。 === LOG: 此绑定在默认加载上下文中开始。 LOG: 使用应用程序配置文件: C:\Developer\sharp\projects\ShadowServer\DataModel\tmp2BEF.tmp LOG: 使用主机配置文件: LOG: 使用来自C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config的机器配置文件。 LOG: 后策略引用: Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 LOG: GAC查找失败。 LOG: 正在尝试下载新的URL文件:///C:/Developer/sharp/projects/ShadowServer/DataModel/bin/Debug/Microsoft.AspNet.Identity.EntityFramework.DLL。 LOG: 程序集下载成功。正在尝试设置文件:C:\Developer\sharp\projects\ShadowServer\DataModel\bin\Debug\Microsoft.AspNet.Identity.EntityFramework.dll LOG: 进入下载缓存设置阶段。 LOG: 程序集名称为:Microsoft.AspNet.Identity.EntityFramework,Version=2.0.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35 WRN: 比较程序集名称导致不匹配: 主要版本号 ERR: 程序集引用与找到的程序集定义不匹配。 ERR: 设置失败,hr = 0x80131040。 ERR: 程序集设置失败(hr = 0x80131040)。探测终止。
提前抱歉我的英语 :)