26

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

无法加载文件或程序集“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,版本=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)] System.Reflection.RuntimeAssembly._nLoad(AssemblyName 文件名,字符串 codeBase,证据 assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark 和 stackMark,IntPtr pPrivHostBinder,布尔 throwOnFileNotFound,布尔 forIntrospection,布尔suppressSecurityChecks)+0
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,证据 assemblySecurity,RuntimeAssembly reqAssembly,StackCrawlMark 和 stackMark,IntPtr pPrivHostBinder,布尔 throwOnFileNotFound,Boolean for Introspection,Boolean suppressSecurityChecks)+210
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMarkString , IntPtr pPrivHostBinder, Boolean for Introspection) +242
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +17 System.Reflection.Assembly.Load(String assemblyString) +35
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +122

[ConfigurationErrorsException:无法加载文件或程序集“System.Web.Razor,版本=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(String preStartInitListPath) +203
System.Web.Compilation.BuildManager.ExecutePreAppStart() +152
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, 异常 appDomainCreationException) +1151

[HttpException (0x80004005): 无法加载文件或程序集“System.Web.Razor,版本=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)]
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+12881540 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文)+159 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext 上下文)+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>

4

6 回答 6

18

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

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

  2. 在 Visual Studio 中,您可以将 dll 设置为在构建时复制到本地,请参阅以下文章(请注意 MVC dll 的名称略有更改,但它为您提供了流程) http://haacked.com/archive/2008/11/03/ bin-部署-aspnetmvc.aspx

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

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

于 2013-04-08T20:06:44.940 回答
14

重新安装包Microsoft.AspNet.Razor ,就像发布的 ADreNaLiNe-DJ 一样。最好的方法是使用Update-Package命令,因为该Install-Package命令不提供强制重新安装的选项,请参阅文档

PM> Update-Package Microsoft.AspNet.Razor -reinstall
于 2018-01-03T14:36:16.027 回答
5

这些解决方案都没有帮助我:要么是因为我无法在服务器上安装任何东西,要么是因为我不喜欢在不使用 Nuget 的情况下直接包含 dll。

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

于 2016-06-09T06:33:55.833 回答
4
  1. 删除 Nuget 清除“临时”文件夹。
  2. 从项目源中删除 Nuget 包,然后使用包管理器重新安装 Nuget 包。
  3. 删除 bin 文件夹。
  4. 清理项目和构建项目。
  5. 运行项目。

完毕

于 2015-02-13T11:07:59.243 回答
3

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

AspNetMVC4Setup.exe 文件的属性

于 2017-08-03T12:10:44.653 回答
0

这个链接上的答案对我有用:

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

于 2020-04-03T14:56:57.797 回答