无法加载文件或程序集'System.Web.WebPages.Razor,Version = 2.0.0.0,Culture = neutral,或其中一个依赖项

时间:2014-01-27 07:28:53

标签: asp.net-mvc razor iis-6 umbraco blogengine.net

请有人帮我解决这个问题。

作为IIS6上的父级的Umbraco应用程序具有以下版本的System.Web.WebPages.Razor。

  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>

  <system.web.webPages.razor>
  <host factoryType="System.Web.WebPages.Razor.WebRazorHostFactory, System.Web.WebPages.Razor" />
  <pages pageBaseType="System.Web.WebPages.WebPage">
  <namespaces>
    <add namespace="Microsoft.Web.Helpers" />
    <add namespace="umbraco" />
    <add namespace="Examine" />
  </namespaces>
</pages>

作为IIS6上Umbraco应用程序下的虚拟目录的Blog Engine应用程序具有以下版本的System.Web.WebPages.Razor。

<configSections>
<remove name="system.web.webPages.razor" />
</configSections>

<assemblies>
<add assembly="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>

<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

即使在我添加dependentAssembly之后仍然没有任何对我有用,我在这个问题上浪费了一个多星期,请帮忙。

6 个答案:

答案 0 :(得分:5)

您是否检查过当前部署到bin文件夹的System.Web.WebPages.Razor的实际版本?我最近在一个多项目解决方案中遇到了类似的问题,其中一个项目是通过Nuget使用旧版本的程序集,这恰好是最终出现在bin文件夹中导致类似错误的版本。事实上,我很确定这是Umbraco Nuget软件包在旧组件中的复制。

答案 1 :(得分:4)

最后,我已经解决了这个问题。 Blog Engine的(子应用程序)Razor Script版本是2.0.0.0和Umbraco(父应用程序)4.1.6应用程序的Razor脚本版本是1.0.0.0,我在子网站上添加了以下内容.config

<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

一旦上面添加,我摆脱了这个错误,我面对下面的相同依赖性错误,我添加了相应的依赖程序集和版本。

Microsoft.Web.Helpers.dll 
Examine.dll
Umbraco.dll
WebGrease.dll

对于上述三个依赖项将不会出现在子应用程序的bin文件夹中,您需要从父bin文件夹中复制dll文件并将其添加到子bin文件夹中,这将对所有依赖项问题进行排序。

对于BlogEngine上作为虚拟目录和Umbraco作为父应用程序的任何部署问题,请留言以帮助您解决任何不同版本的问题。

答案 2 :(得分:3)

@ProNotion是对的,我看到越来越多的Umbraco软件包依赖于特定版本的程序集导致程序集冲突,特别是如果两个软件包需要同一程序集的不同版本。

所以其他一些提示:

MS的这个工具有助于诊断程序集绑定问题(http://msdn.microsoft.com/en-us/library/e74a18c4%28v=vs.71%29.aspx)。

在web.config中添加运行时/ assemblyBinding部分可以解决碰撞程序集的问题(http://msdn.microsoft.com/en-us/library/0ash1ksb(v=vs.110).aspx

有时程序集不会被复制(例如,你使用msbuild并且程序集不包含在项目中) - 所以你还应该检查程序集是否将它发送到实时服务器。

答案 3 :(得分:2)

请尝试以下步骤。

  1. 检查参考文献中 System.Web.Webpages 的版本。说你的版本是= X.X.X.X
  2. 2.在Webconfig中

    a。首先添加程序集

    <assemblies>        
      <add assembly="System.Web.WebPages, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </assemblies>
    

    b。将程序集绑定到运行时

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-X.X.X.X" newVersion="X.X.X.X"/>
      </dependentAssembly>        
    </assemblyBinding>
    

    3.确保添加了正确的密钥

    <appSettings>
        <add key="webpages:Version" value="X.X.X.X"/>
    </appSettings>
    

    这对我有用。希望它也会帮助你。

答案 4 :(得分:0)

有时,你会在

之间出错
System.Web.WebPages.Razor
and
System.Web.Razor

试试看并检查

答案 5 :(得分:0)

创建一个新区域,右键单击项目,添加,区域

将web.config从此区域的views文件夹复制到/views/web.config

删除区域