0

我刚刚创建了一个新的 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" />-->:

如果有人知道实际出了什么问题,并且我的“修复”是一个很好的解决方案,那将是一个很好的答案..

4

1 回答 1

1

Piranha CMS 本身不使用 ASP.NET Identity,所以就像您注意到它与运行时程序集绑定有关。NuGet 2.7 有一个错误,导致在安装 ASP.NET MVC 包时运行时绑定从 web.config 中丢失。当在本地计算机上安装多个版本的 Razor/WebPages/MVC ( http://piranhacms.org/installing-piranha-cms-with-nuget-27 ) 时,这会导致应用程序崩溃。

为了解决这个问题,即让我免于过多的支持,这些缺失的行被添加到 Piranha NuGet 包的 web.config.transform 中。

我的猜测是,NuGet 的新版本已经解决了这些问题,并且您在绑定中遇到了某种形式的冲突,因此您将修改后的行替换为原始行的方法是正确的。

我将看看我是否可以在 NuGet 上发布 2.1.x 的服务版本,并从 NuGet 包中删除运行时绑定。

问候

/ 哈坎

于 2014-02-05T08:30:08.813 回答