我知道这篇文章发布已经快一年了,但我只需要为自己找出同样问题的答案,所以我就是这样做的。我们使用的是 VSTS,所以它可能与本地 TFS 略有不同,我不知道。
1。在构建定义中配置多个配置
1.1 打开构建定义进行编辑。
1.2 在“变量”选项卡下,编辑BuildConfiguration 变量的值(如果该变量不存在,请添加该变量),使其成为您希望构建的各种配置的逗号分隔列表。这些值中的每一个都必须对应于源代码中的配置。在我的示例中,我有三种配置 - 开发、测试和暂存。在我的代码中,每个配置都有自己的 web.config 转换文件,指定不同的数据库连接字符串等等。
1.3 在 Options 选项卡下,在右侧启用 Multi-configuration。
1.4 在多重配置设置中,在Multipliers 字段中输入BuildConfiguration 变量的名称。这必须与您在步骤 1.2 中为其设置值的变量的名称完全匹配。在我的示例中,您可以看到我还选中了 Parallel 框,并且效果很好。我想如果您遇到问题,您可以取消选中此项。
1.5 在 Tasks 选项卡下,选择 Build 任务。
1.6 在构建任务的选项中,您需要更新MSBuild Arguments 字段,以便输出目录包含BuildConfiguration 变量。这样,Build 任务将为每个配置创建一个单独的输出目录。在这种情况下,BuildConfiguration 变量被指定为$(BuildConfiguration)。
1.7 仍然在 Tasks 选项卡下,选择 Publish Artifact 任务。
1.8 将BuildConfiguration 变量添加到Path to Publish 字段中指定的路径。这再次意味着,当工件被删除准备好发布过程来拾取它们时,每个配置都有自己的子文件夹。同样,在这种情况下,BuildConfiguration 变量被指定为$(BuildConfiguration)。
1.9 将 Artifact Name 字段的值更改为 BuildConfiguration 变量 - 再次,这里是 $(BuildConfiguration)。
2。为多个配置配置发布定义
根据您的要求,这部分可能不是必需的,但无论如何我都会包含它。这就是我在发布定义中创建多个环境的方式,每个环境都使用与构建过程不同的配置。
2.1。打开您的发布定义进行编辑。
2.2。在 Environments 选项卡下,选择您要配置的环境。这个例子展示了我如何配置开发环境。
我正在使用复制文件任务来发布我的 Web 应用程序。您可能使用了不同的方法,但如果您使用不同的方法,希望这足以为您指明正确的方向。
2.3。选择复制文件任务。
2.4。修改 Source 字段的值,使其包含包含适合您正在配置的环境的构建配置的子文件夹。
2.5。继续并根据您的要求配置其余的环境设置 - 机器(您将文件发布到的服务器)等。至少 Destination Folder 字段对于您的每个环境都必然不同。 Machines 字段也可能会有所不同。
如果您在对新构建进行排队时看起来像这样,您就会知道您的构建过程正在正确构建多个配置。注意左侧的多个配置:
我希望这可以帮助其他人完成这项工作!
更新
上述解决方案似乎运作良好。然而,随着我部署我们的一个应用程序的环境数量的增加(目前有 10 个并且还在增加),我开始寻找另一种方法来为每个环境转换 Web.config,因为唯一实际的环境之间的区别在于数据库连接字符串。
这导致我放弃了上述解决方案。相反,我们的构建过程现在只使用一个Web.config 转换(而不是每个环境一个),它删除了调试属性并将数据库连接字符串替换为标记化版本,其中数据库服务器、名称等是标记将由部署过程填充。
这更整洁。我们的代码现在只包含一个Web.config 转换,我们的构建过程现在要快得多,因为我们没有为每个环境生成构建,并且数据库密码等被存储、加密,作为发布配置中的变量。
我所做的事情的要点是详细的 here,但是虽然那篇文章的作者使用了一个名为 Tokenizer 的工具,安装在他的本地 TFS 机器上,但我使用了非常好的 Tokenization Task 来自我的发布配置中的市场,用于转换我在 Web.config 文件中使用的令牌。