【问题标题】:What happens when I deploy a .NET web application?部署 .NET Web 应用程序时会发生什么?
【发布时间】:2016-10-19 13:19:58
【问题描述】:

我今年换了工作,因此我从 Java 切换到 C#。在这两个工作中,我都在一个大型应用程序上工作/工作,该应用程序部署到服务器并公开各种 Web 服务。

使用 Java 作业,ant 构建过程创建了一个 .ear 文件,其中包含一个 .war 文件和其他对象。这个 .ear 文件是通过将其复制到 JBoss/tomcat 服务器内的目录中来部署的。我非常了解这个过程。

使用 C# 作业,我在 Visual Studio 中按下绿色三角形“播放”按钮,应用程序被编译并以某种方式部署到 IIS,然后 Visual Studio 启动指向应用程序 URL 的 Web 浏览器。我不完全理解在这个过程中发生了什么。我们有一个构建服务器,它可以创建输出到生产服务器的生产构建,但我不明白 a) 构建过程产生了哪些工件,以及 b) 这些构建工件是如何部署到 IIS 的。

我想充分了解该流程,以手动推动构建和部署、重新自动化流程,以及解决和修改我们现有的构建和部署流程。我可以使用 msbuild 驱动构建,但这会产生什么,我如何将它部署到另一台机器的 IIS 安装上?

【问题讨论】:

标签: c# iis deployment


【解决方案1】:

点击运行时发生的情况(绿色三角形)可能不是最好的例子,因为它使用了一种特殊形式的 IIS(有时称为 Cassini),托管在 Visual Studio 中并附加了调试器。

要更清楚地了解部署时发生的情况,请使用发布工具部署到桌面上的文件夹。在该文件夹中,您将看到本质上是 Web 根目录。您的项目,减去任何代码文件,以及包含已编译二进制文件的 bin 目录。

通常只会部署静态文件,例如 html、css 和 png 等,而不会部署任何代码文件。默认情况下,Visual Studio“知道”哪些文件要构建到二进制文件中,哪些文件要简单地复制到输出文件夹(以及哪些要忽略)。但是,如果您需要覆盖该行为,或者您有 VS 不知道的文件类型,则可以更改此设置。在您的解决方案资源管理器中,右键单击文件,选择属性。在该文件的属性窗口中,您将看到“构建操作”,它显示了 VS 将对该文件执行的操作。

希望对您有所帮助。

【讨论】:

  • 自 VS 2013 起,Cassini 已被 IIS Express 取代。
  • @WiktorZychla 因此是“有时”。在此之前,IIS Express 实际上也是一个选项。
  • 我相信您可以在回答中反映这一点,因为它可能会误导某人相信 Cassini 是“IIS 的特殊形式”,而两者无关。如果 OP 说他刚从 Java 切换过来,他可能永远不需要知道当时的 Cassini 是什么。
  • @NeilN 有帮助,谢谢;我认为我们实际上配置为从 VS 部署到完整的 IIS,以便在端口 80 上运行(这需要以管理员权限运行 VS)但这仍然有助于我全面了解正在发生的事情以及如何在 VS 之外驱动流程。
  • 试图发布到一个文件夹,但看起来我必须单独完成每个项目,而且他们似乎遇到了一些奇怪的问题,比如丢失文件。还不确定当项目每天使用运行按钮都能正常工作时会出现这种情况。
【解决方案2】:

只需添加注释。

所以,

如果您使用的是 ASP.NET 网站,手动将其复制到发布文件夹就足够了

如果您正在使用 ASP.NET Web 应用程序,那么在发布之前应该对其进行编译。所有编译操作都由MSBuild 执行 - 用于构建 .net 项目的命令行实用程序。但是MSBuild 是如何理解的,它应该构建什么以及以什么方式构建?简单 - 有带有 MSBuild 说明的特殊文件 - 是解决方案文件(例如如何从命令行 "C:\...\MSBuild.exe" /maxcpucount:10 MyAwesomeSolution.sln 构建项目)。解决方案文件包含对项目文件的引用(以及项目的构建顺序等),项目文件包含对文件的引用,这些文件包含在项目中(和项目类型 - 库/控制台/Web 应用程序/等,以及框架版本和操作每个文件 - 构建/内容/资源等)。如果某些文件未包含到项目中,它将被忽略。

所以,当您按下绿色按钮时,VS 将首先运行 MSBuild 来构建您的解决方案。应该编写内部解决方案,将哪个项目用作起点以及在构建之前/之后应该做什么。项目内部有信息,如何调试项目(通过 IIS、IIS express 或 smthg else)。

所以,当我们使用一些 CI 服务器时,编译我们的解决方案就足以在 CI 服务器上运行MSBuild 并提供解决方案的路径。 Ofcource,要通过 CI 发布已编译的解决方案,应编写额外的脚本(到 cpy 文件等)。

另外,如果您想将您的网站发布到某个位置,您可以创建“发布配置文件”。它允许您将您的网站发布到 IIS、FTP 等,但您必须手动按“发布”按钮(右键单击 Web 项目 => 发布)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多