我刚刚创建了一个新的 MVC4 站点,按下运行查看它是否有效,然后运行命令:
安装包 PiranhaCMS.Mvc
然后再次按下运行。这会导致显示以下错误:
无法加载文件或程序集“DotNetOpenAuth.Core,Version=4.0.0.0,Culture=neutral,PublicKeyToken=2780ccd10d57b246”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)
我尝试了该线程中所有高票数的解决方案,除了那些涉及删除 OAuth 的解决方案(因为我想使用它)。
我试过了:
- 删除 bin 和 obj 文件夹。
- 使用 Install-Package Microsoft.AspNet.WebPages.OAuth 重新安装 Oauth
- 清洁解决方案(结合其他两个选项)
仍然没有运气,有什么想法吗?
编辑1:
我注意到安装对我的 Web.config 进行了一些关于 OpenAuth 程序集版本的更改。
原来的:
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
新的
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /><assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /></dependentAssembly>
我猜 Piranha 正在改变 MVC4 假设可用的内容,但不是 dll 本身?
编辑 2
看起来 Piranha 已经从几个dependentAssembly 节点中删除了 1 (就像我在上面的编辑中一样)。问题是我是否可以将它们改回来,或者这是否会破坏 Piranha...
编辑 3
粘贴旧值消除了问题..我的网站现在显示安装新网站屏幕。仍然不确定这是否破坏了其他任何东西。
将 web.config 中的内容替换为以下内容:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
还不得不注释掉这一行
<!--<forms loginUrl="~/Account/Login" timeout="2880" />-->:
如果有人知道实际出了什么问题,并且我的“修复”是一个很好的解决方案,那将是一个很好的答案..