无法加载文件或程序集“System.Web.Razor”或其依赖项之一

时间:2013-04-08 08:18:00

标签: c# asp.net asp.net-mvc deployment umbraco

我在我的网站(网络应用程序)中使用了Umbraco 4.11.6。我的网站在localhost中工作(从Visual Studio 2012和IIS(v7)测试)但是当我从互联网空间运行它时出现错误。 错误是:

无法加载文件或程序集“System.Web.Razor”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

  

程序集加载跟踪:以下信息有助于确定无法加载程序集“System.Web.Razor”的原因。

     

警告:程序集绑定日志记录已关闭。   要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。   注意:程序集绑定失败日志记录会导致一些性能损失。   要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

堆栈追踪:

  
    

[FileLoadException:无法加载文件或程序集'System.Web.Razor'或其依赖项之一。定位组件     清单定义与程序集引用不匹配。 (例外     来自HRESULT:0x80131040)]

  
     

[FileLoadException:无法加载文件或程序集'System.Web.Razor,   Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或   其中一个依赖项。定位程序集的清单定义   与装配参考不匹配。 (HRESULT的例外情况:   0x80131040)] System.Reflection.RuntimeAssembly._nLoad(AssemblyName   fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly   locationHint,StackCrawlMark& stackMark,IntPtr pPrivHostBinder,   Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean   suppressSecurityChecks)+0
  System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName   assemblyRef,Evidence assemblySecurity,RuntimeAssembly reqAssembly,   StackCrawlMark&安培; stackMark,IntPtr pPrivHostBinder,Boolean   throwOnFileNotFound,Boolean forIntrospection,Boolean   suppressSecurityChecks)+210
  System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,   证据集合安全,StackCrawlMark& stackMark,IntPtr   pPrivHostBinder,Boolean forIntrospection)+242
  System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,   证据集合安全,StackCrawlMark& stackMark,布尔   forIntrospection)+17 System.Reflection.Assembly.Load(String   assemblyString)+35
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,Boolean starDirective)+122

     

[ConfigurationErrorsException:无法加载文件或程序集   'System.Web.Razor,Version = 2.0.0.0,Culture = neutral,   PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该   找到程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)]
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔starDirective)+12761078
  System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()   +503 System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()+ 142 System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection   compConfig)+334
  System.Web.Compilation.BuildManager.CallPreStartInitMethods(字符串   preStartInitListPath)+203
  System.Web.Compilation.BuildManager.ExecutePreAppStart()+152
  System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager   appManager,IApplicationHost appHost,IConfigMapPathFactory   configMapPathFactory,HostingEnvironmentParameters hostingParameters,   PolicyLevel policyLevel,Exception appDomainCreationException)+1151

     

[HttpException(0x80004005):无法加载文件或程序集   'System.Web.Razor,Version = 2.0.0.0,Culture = neutral,   PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该   找到程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)]
  System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+12881540   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)   +159 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest)   wr,HttpContext context)+12722601

     

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.17929

WebConfig的一部分:

<runtime>
<!-- Old asp.net ajax assembly bindings -->
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <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>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

6 个答案:

答案 0 :(得分:18)

有很多方法可以解决这个问题:

  1. 在Web服务器上安装MVC(并非总是可行)。

  2. 在visual studio中,您可以将dll设置为在构建时复制到本地,请参阅以下文章(请注意MVC dll稍微更改了名称,但它为您提供了进程) http://haacked.com/archive/2008/11/03/bin-deploy-aspnetmvc.aspx

  3. 将适当的dll从GAC复制到umbraco站点的bin文件夹中。 要执行此操作,请在资源管理器中打开“%windir%\ Microsoft.NET \ assembly \ GAC_MSIL”,您将找到GAC中安装的所有dll,您可以将相应的版本复制到项目中。这与上述方法类似,但绕过构建项目。

  4. 就文件而言,您可能需要的不仅仅是System.Web.Razor.dll,但这适用于所有丢失的文件。

答案 1 :(得分:8)

重新安装包Microsoft.AspNet.Razor,例如ADreNaLiNe-DJ posted。执行此操作的最佳方法是使用@NgModule({ imports: [ BrowserModule ], declarations: [ LoginComponent , DialogOverviewExampleDialog], entryComponents: [ DialogOverviewExampleDialog], bootstrap: [ App ] }) 命令,因为Update-Package命令未提供强制重新安装的选项,请参阅docs

Install-Package

答案 2 :(得分:4)

这些解决方案中没有一个帮助我:因为我不能在服务器上安装任何东西,因为我不想在不使用Nuget的情况下直接包含dll。

我使用的解决方案是安装/重新安装名为 Microsoft.AspNet.Razor (Microsoft ASP.Net Razor 2.0.20710)

的nuget包

答案 3 :(得分:3)

  1. 删除Nuget clear&#34; Temp&#34;文件夹。
  2. 从项目源删除Nuget包,然后使用包管理器重新安装Nuget包。
  3. 删除bin文件夹。
  4. 清洁项目&amp;建立项目。
  5. 运行项目。
  6. 完成

答案 4 :(得分:1)

我不想安装visual studio和开发环境,所以我在Windows server 2016机器上安装了AspNetMVC4Setup.exe,它解决了这个问题。安装程序是从Microsoft网站下载的。

Properties of AspNetMVC4Setup.exe file

答案 5 :(得分:0)

答案this link对我有用:

打开程序包管理器控制台
工具> NuGet软件包管理器>软件包管理器控制台
将包源更改为Microsoft和.Net。
将项目更改为要调试的项目。
运行以下命令。
更新包Microsoft.AspNet.Mvc-重新安装