我可以使用msbuild打包带有发布配置文件的网站并跳过web.config转换吗?

时间:2013-07-30 15:55:03

标签: asp.net msbuild web.config-transform

我有一个包含三个发布配置文件的网站解决方案,我们用它来转换每个目标环境的连接字符串:

  • 测试 - 本地主机连接,没有转换,默认值在
  • 中签入
  • 暂存 - 虚拟机环境
  • 制作 - 真正的交易

我们还有一些应用程序设置需要针对每个环境进行转换。因此,我们使用常规的基于构建配置的转换。

  • 调试 - 转换Staging的设置
  • 发布 - 转换生产设置

当我们尝试打包测试配置文件时,这会让我们陷入困境。我们打包它,以便测试人员可以从他们的系统上部署构建工件而不是源代码。但是,测试包会选择调试应用程序设置转换。

有没有办法告诉msbuild打包网站,使用测试配置文件,但跳过配置转换?或者我应该重新构建环境中的构建配置? (也就是说,单独保留Debug和Release并为每个环境创建一个构建配置)

命令行构建语句

我正在调试解决方案配置下构建我的测试配置,它肯定会获取转换后的Web.Debug.config文件。没有Web.Test.config文件,因为Test是“发布配置文件”而不是构建配置。

cmd> msbuild websites.sln /t:Build /p:Configuration=Debug;Platform="Any CPU";DeployOnBuild=true;DeployTarget=Package;PublishProfile=Test;VisualStudioVersion=11.0

也许我在这里做错了什么。我觉得配置/平台是多余的,因为我也在“发布配置文件”对话框中提供了这些内容。 Visual Studio版本对我来说是一个惊喜,但是生成zip包是必要的。

3 个答案:

答案 0 :(得分:2)

我会为每个环境构建一个配置以保持一致性。但是,如果没有为特定环境(即 web.Test.config )提供配置,则您发布的版本将只使用原始 web.config中放置的内容文件而不是变换。

答案 1 :(得分:2)

如果您从命令行构建您的网站sln,您可以提供参数OutputPath: 例如

msbuild websites.sln /p:OutputPath=c:\test

如果运行打开c:\ test,您将找到一个包含所有已编译站点的文件夹_PublishedWebsites。不需要发布配置文件。 啊但是如何在不使用msdeloy和发布配置文件的情况下配置它? 您可以创建自己的XDT,例如用于调试和发布的XDT,web.config.staging添加这些文件并进行设置 构建行动:内容 复制到输出:始终复制

您可以使用xdt转换工具(如CCT)随时转换您的网络配置。 (即在Visual Studio之外 - 部署甚至重新部署) CTT很棒BTW。另外,为了更进一步,你应该制作你的XDT文件模板,并为每个环境,prod等提供属性。但这是另一种游戏。

答案 2 :(得分:2)

最后,我做了Mitch开始建议的事情 - 在解决方案/项目配置,发布配置文件和环境之间保持1:1的关系。如果你给它想要的一切,工具效果会更好。

所以,这应该是一个明智的选择

| Environment | Solution       | Publish  | Assembly       |
|             | Configuration  | Profile  | Configuration  |
============================================================
| Test        | Test           | Test     | Debug          |
| Staging     | Staging        | Staging  | Debug          |
| Prod        | Prod           | Prod     | Release        |

我可以在发布配置文件中指定程序集构建配置(以便生产环境获得发布优化)。并且,配置/平台属性将从命令行中消失。

cmd> msbuild my.sln /t:Build /p:DeployOnBuild=true;DeployTarget=Package;PublishProfile=Staging;VisualStudioVersion=11.0

一切都以一个整洁的包文件夹结束

.\websites\somewebsite\obj\Staging\Package