4

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

  • 测试 - 本地主机连接,无转换,默认值已签入
  • 暂存 - 虚拟机环境
  • 生产 - 真正的交易

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

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

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

有没有办法告诉 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 包所必需的。

4

3 回答 3

2

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

于 2013-07-30T16:00:28.450 回答
2

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

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

当它运行打开 c:\test 时,您将找到一个文件夹 _PublishedWebsites,其中包含所有已编译的站点。不需要发布配置文件。啊,但是如何在不使用 msdeloy 和发布配置文件的情况下配置它?您可以创建自己的 XDT,例如用于调试和发布的 XDT,web.config.staging 添加这些文件并设置 Build Action :content copy to output:Copy always

您可以随时使用像CCT这样的 xdt 转换工具 来转换您的网络配置。(即在 Visual Studio 之外 - 在部署甚至重新部署时)CTT 是很棒的顺便说一句。此外,更进一步,您应该制作您的 XDT 文件模板,并为每个 env uat、prod 等设置属性。但那是另一个游戏。

于 2013-07-31T08:30:19.463 回答
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
于 2013-08-13T14:22:43.020 回答