ASP.NET Web应用程序构建输出 - 如何包含所有部署文件?

4
当我构建我的ASP.NET Web应用程序时,我会得到一个包含网站代码的.dll文件(这很棒),但网站还需要所有的.aspx文件和相关文件,并且这些文件需要放置在正确的目录结构中。如何将这一切作为每次构建的结果放在一个目录中?从源目录中选择正确的文件很麻烦。
最终结果应该是可通过xcopy部署的。
更新:我不想手动使用我知道的发布命令。我希望应用程序所需的完整文件集成为构建输出 - 这意味着我也可以从运行MSBuild中获得完整的文件集。
9个回答

5
一种解决方案似乎是Web Deployment Projects (WDPs),这是一个可用于Visual Studio(和msbuild)的附加组件,可以将Web项目构建到一个目录中,并可以选择合并程序集和更改web.config文件。构建WDP的输出是部署网站所需的所有文件都在一个目录中。
有关Web Deployment Projects的更多信息:
  1. WDP 2008的webdevtools MSDN博客公告
  2. ScottGu介绍WDP 2005
这种解决方案唯一的缺点是需要构建机上必须安装附加组件。不过,它现在已经足够好了!

这正是我们用来为用户准备发布或测试副本的网站/应用程序的方法。 - icelava

2

ASP.NET没有针对站点的真正的xcopy部署方式。它依赖于在IIS中拥有虚拟目录/应用程序。然而,一旦创建了该虚拟目录,您可以使用xcopy进行更新。


没错,我有一个PowerShell脚本,可以在所有文件都放置正确的位置时安装网站。当我想要更新网站时,我再次需要所有文件,并且可以使用xcopy部署这些文件。 - Simon Steele
当您更新网站时,通过VS发布网站和运行脚本有什么区别? - GEOCHET
我正在开发用于公司Intranet之外的网站 - 也就是说,我需要将网站带到客户那里并在那里安装,或者准备好打包。我还想从构建服务器安装官方版本的网站。 - Simon Steele

1

使用MSBuild上的_CopyWebApplication目标将会精准地实现你的需求。但是需要注意的是,只有主要程序集会被复制到bin文件夹中,因此需要一个复制任务来复制bin文件夹中的任何其他文件。

我试图将示例脚本作为帖子的一部分发布,但无法实现。

请查看我博客上的文章,其中介绍了如何创建类似于您所需的MSBuild脚本。


1

1
你尝试过在你的 .net 框架目录中使用 aspnet_compiler.exe 吗?我很确定你可以创建一个“部署就绪”的 Web 应用程序或网站版本。

0

这取决于您需要多复杂的解决方案,您可以只使用脚本和Jenkins。例如,您可以使用MSBuild与Jenkins仅发布到IIS。如果您有Jenkins,其他工具连接到它也很容易。但是,如果您只想构建,请使用一个脚本,jenins执行每个构建使用MSDeploy,并且它将运行得很好。

这是我做的方式,只是为了让您有所感触:

Sonarqube使用Gallio、Gendarme、FXcop、Stylecop、NDepths和PartCover来获取您的度量标准,所有这些都非常直接,因为SonarQube会自动完成这些而无需进行太多配置。

这里是Jenkins,用于构建并获取Sonar指标以及另一个自动部署到IIS的作业。我使用一行简单的脚本调用我的MSBuild和URL、密码和用户。

并且Sonarqube为我的项目提供了所有的度量标准。这是一个简单的MVC4应用程序,但它运行得非常好!

如果您需要更多信息,我可以为您提供一份好的指南。

整个设置使用MSBuild来构建和部署应用程序。


0
你尝试过在解决方案资源管理器中右键单击网站,然后点击“发布网站”吗?

是的,我可以像手动步骤一样发布网站,但我希望构建解决方案的结果将部署项放置在与解决方案构建结果相同的目录中。这也意味着在构建机器上运行msbuild可以得到我想要的结果。 - Simon Steele
如果您想要一个自动化的构建脚本,您应该更新您的问题。 - GEOCHET

0

构建 --> 发布

将会出现一个对话框,引导您完成整个过程。


0

嗨Rich,我已经在使用MSBuild来构建项目了,并且这是由一个类似于CCNet的内部系统在每次检入时触发的。问题是只有来自项目的程序集被放置在输出目录中 - 没有.aspx文件或其他内容 - 我也想要内容。 - Simon Steele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接