新的MVC4解决方案,添加Piranha CMS,缺少装配

时间:2014-02-04 21:24:38

标签: asp.net-mvc-4 oauth piranha-cms

我刚刚创建了一个新的MVC4站点,按下run以查看它是否有效,然后运行命令:

  

Install-Package 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(就像我上面的编辑一样)。问题是,如果我可以改变它们,或者如果这会打破食人鱼......

编辑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" />-->:

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

1 个答案:

答案 0 :(得分:1)

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

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

我的猜测是NuGet的新版本已经解决了这些问题,并且你在绑定中遇到了某种形式的冲突,所以你要用原来的方法替换修改过的行是正确的。

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

此致

/Håkan