我是不是需要在 Web 服务器上安装 MVC 3/4 才能运行 mvc 应用程序

Posted

技术标签:

【中文标题】我是不是需要在 Web 服务器上安装 MVC 3/4 才能运行 mvc 应用程序【英文标题】:Do I need to install MVC 3/4 on web server to run mvc application我是否需要在 Web 服务器上安装 MVC 3/4 才能运行 mvc 应用程序 【发布时间】:2012-05-04 01:35:33 【问题描述】:

我有一个 MVC 4 应用程序,并且在我为 VS 2010 安装 MVC 4 扩展的 DEV 机器上运行良好。

使用 IIS 7 部署到 Web 服务器时,我需要安装 MVC 4 还是我的项目中包含的 dll 就足够了?

我问的原因是我们需要向基础架构团队提供需求。

谢谢。

【问题讨论】:

【参考方案1】:

您无需在服务器上安装 MVC 即可运行 MVC 应用程序。 Visual Studio 中有一种叫做可部署依赖的东西。这将在您发布时将您的 MVC DLL 发布到您的 bin 文件夹中。

来自msdn 页面,

这会将程序集(DLL 文件)添加到网站项目或 Web 应用程序 项目。当您部署您的网站或应用程序时,这些文件是 包含在已部署的项目中。如果应用程序或 您的项目所依赖的技术尚未安装 将托管您的 Web 项目的服务器。例如,您可以使用 此功能用于将 ASP.NET MVC 3 Web 应用程序部署到服务器 没有安装 ASP.NET MVC 3。

右键单击项目并从上下文菜单中选择添加可部署依赖项

选择要发布的所有 DLL

单击确定后,您将看到一个名为 _bin_deployableAssemblies 的新文件夹。您现在可以执行正常的发布过程,并且您将在发布输出的 bin 文件夹中拥有 dll。

查看此帖子了解更多详情http://haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspx

您应该拥有 Visual Studio 2010 SP1。否则,当您右键单击要发布的项目时,它不会显示在上下文菜单中。

编辑: 从 MVC4 开始,运行 MVC 应用程序所需的所有程序集都会自动添加到 bin 目录中,并且任何 MVC4 应用程序都是可 bin 部署的(意味着您可以在服务器中运行它而无需显式安装 MVC)。因此,“包含可部署程序集”对话框已从 Visual Studio 2012 中删除

【讨论】:

Shyju 我有一个 MVC4 应用程序,它没有将所有需要的程序集添加到 bin (System.Web.Razor)。你有关于如何在 MVC4 中控制/完成的信息或链接吗?谢谢 我想通了。在 VS 2012 中,您必须在其属性中将 Reference 的 Copy Local 设置为 True。见帖子:***.com/questions/15145253/… 刚刚看到 AvkashChauhan 已经在下面回答了。 我在服务器上专门安装了服务端MVC 3和MVC 4包,避免每次都复制常用的MVC库(我们有很多单独的小网站,常用的库总结起来到千兆字节)。它与 MVC 3 完美配合(不复制共享二进制文件),但在 MVC 4 中完全不起作用 - 如果我为共享二进制文件设置 CopyLocal=false,则网站无法工作。那么服务器端包的意义何在?是否有适当的支持方式在 GAC 中全局安装 MVC 4,就像 MVC3 一样?【参考方案2】:

您不再可以在 Visual Studio 2012 中选择“添加可部署的依赖项”。因此您必须手动执行此操作,方法是对所有 MVC 程序集进行 bin 部署:

Microsoft.Web.Infrastructure
System.Web.Helpers
System.Web.Mvc
System.Web.Razor
System.Web.WebPages
System.Web.WebPages.Deployment
System.Web.WebPages.Razor

可以找到分步指南here。

【讨论】:

是的,我在 VS2015 中也没有看到“添加可部署依赖项”选项。【参考方案3】:

当你在 Visual Studio 中创建一个 MVCx 特定项目时,你会看到许多 MVC.* 引用被添加到你的项目中,默认情况下,所有这些引用属性“复制本地”设置为“真”意味着这些引用将是无论何时部署到最终解决方案的一部分。您还可以验证这些 MVC 特定引用也是您的 BIN 文件夹的一部分。

最后,当您将此解决方案打包并发布到特定的 Web 服务器或 Windows Azure 或使用 WebDeploy 时,所有这些引用也将成为您的包的一部分。并且因为这些参考是在您的包中提供的,所以无论您在哪里部署解决方案,所有 MVC 特定参考都将在那里,因此您不需要将 MVC 部署到这些特定服务器。

我还想补充一点,当您在 Visual Studio 中添加对项目的特定引用时,请将其属性“复制本地”设置为 TRUE,这样引用将始终成为您最终解决方案的一部分,并且可以节省您的时间免于将来的麻烦。

【讨论】:

很好的答案。这对于 MVC4 非常重要,因为 Add Deployable Dependencies 已从 VS 2012 中删除。【参考方案4】:

您只需要将 dll 部署到项目的 bin 中。有关如何准备发布网站的示例,请查看以下博客文章:

running-an-asp-net-mvc-3-app-on-a-web-server-that-doesn-t-have-asp-net-mvc-3-installed.aspx.

【讨论】:

以上是关于我是不是需要在 Web 服务器上安装 MVC 3/4 才能运行 mvc 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 在“发布”上应用 web.config 转换

IIS 6.1 显示目录列表而不是 MVC 3 应用程序

Asp.Net MVC4 Web API - 我们是不是需要 OData 来构建快速查询服务

ASP.NET MVC web.config(多个)问题

部署到 Web 服务器后 MVC Null 异常

单独项目中的 MVC 解决方案中的 Web API