【问题标题】:MVC3 Deployment Dependency ProblemsMVC3 部署依赖问题
【发布时间】:2011-06-12 04:32:47
【问题描述】:

我刚刚尝试将 MVC3 应用程序部署到我们的 IIS7 托管环境,但出现以下异常:

无法加载类型 'Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility' 从组装 'Microsoft.Web.Infrastructure, 版本=1.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35'。 描述:未处理的异常 在执行过程中发生 当前的网络请求。请查看 堆栈跟踪以获取有关的更多信息 错误及其起源 代码。

异常详情: System.TypeLoadException:不能 负载类型 'Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility' 从组装 'Microsoft.Web.Infrastructure, 版本=1.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35'。

有什么建议吗?

应用程序没有被 bin 部署,因为我在 Web 服务器本身上安装了 ASP.Net 网页和 MVC3。

【问题讨论】:

  • 澄清一下,我不是在部署这个应用程序——我已经在服务器上安装了 MVC3。
  • 还有哪些其他方式来部署应用程序?
  • @Shawn - 如果有人说“只是 bin 部署它”,他们的意思是“部署应用程序并将依赖项复制到应用程序的 /bin 文件夹中,而不是运行将依赖项安装到全局程序集的 MSI缓存 (GAC)。” - 斯科特·汉塞尔曼

标签: asp.net-mvc deployment webserver asp.net-mvc-3


【解决方案1】:

这是因为Microsoft.Web.Infrastructure 不在您的 GAC 中。您需要将此引用添加到您的项目中。右键单击引用并转到属性,然后将复制到本地设置为 true。

输出(忽略 Ninject 和 NCU):

【讨论】:

  • 我检查了 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.Web.Infrastructure\v4.0_1.0.0.0__31bf3856ad364e35 并且 DLL 确实存在。我的项目中没有这种依赖关系。
  • 你可能还需要参考一些其他的东西。 Razor、System.Webpages 等东西。它不会出现在您的项目中,但您可以通过从框架程序集中添加来引用它。
  • 不应该包含在 System.Web.MVC DLL 中吗?
  • 这个问题昨天发生在我身上,我将使用进入输出目录的所有 ddls 更新我的帖子。
  • 刚刚复制并部署了本地版本的Microsoft.Web.Infrastructure DLL,错误仍然存​​在。
【解决方案2】:

确保您服务器上的根 web.config 文件(位于此处:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config)具有以下条目:

<configuration>
  <location allowOverride="true">
    <system.web>
      <fullTrustAssemblies>
        <add
          assemblyName="Microsoft.Web.Infrastructure"
          version="1.0.0.0"
          publicKey="[bunch of letters and numbers]"
        />

如果它丢失,则意味着有人弄乱了您的 .NET 4 安装。

【讨论】:

  • publicKey 看起来很吓人。
  • 我简化了 :) 关键是,MVC 3 和 WebPages 要求该条目存在 Microsoft.Web.Infrastructure 才能工作。
  • 是的。找到了,看起来不错。
  • 那我不知道怎么了。该异常堆栈跟踪还有什么其他内容吗?
【解决方案3】:

Microsoft.Web.Infrastructure 现在是一个 Nuget 包,可以将它添加到您的项目中以启用 bin 目录部署 --

http://nuget.org/packages/Microsoft.Web.Infrastructure

【讨论】:

  • 我的项目中安装了包,但项目没有引用 DLL。我猜 ReSharper 的“删除未使用的引用”的过度热心的应用程序可能已经删除了比它应该删除的更多...
【解决方案4】:

在执行参考清理后,它发现Microsoft.Web.Infrastructure 被删除,但没有从 packages.config 文件中删除。在尝试使用Package Manager Console 再次添加它后,Visual Studio 说它已经安装,这是错误的,因为它已被删除。

然后我删除了packages.config文件中的代码行

<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />

然后再次运行命令

PM> Install-Package Microsoft.Web.Infrastructure

在这之后,现在它可以正常工作了。

【讨论】:

  • 即使安装了软件包,您也可以强制重新安装,而不是使用以下命令执行您所做的操作:Update-Package Microsoft.Web.Infrastructure -Reinstall
  • 对我来说,该软件包已从参考资料中删除,而不是从软件包列表中删除。所以我把它添加回来作为参考(必须浏览我的项目在本地安装的包)
  • 我已按照上述所有步骤操作,现在我的代码运行良好,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2019-06-29
  • 2012-12-25
相关资源
最近更新 更多