1

假设我有一个成功构建的.NET项目。现在,我需要选择性地构建到不同的环境,如DEV,QA和PROD。每个都需要自己的配置文件(例如app.config)来包含相应的连接字符串和其他设置。推荐使用可选配置构建.NET项目的方法

我看了一下简单的预构建脚本,例如Scott Hanselman的this one。它的工作原理,但我的问题是预构建步骤修改源。简单地构建项目将覆盖源文件并不必要地触发源代码管理修改。

我也可以看看VS/MSBuild以外的脚本,在配置文件放在那里,但我真的希望还有更好的方法。也许是VS/MSBuild中独立的一种方式?

我对目标服务器的部署策略很灵活。我考虑过一个安装项目,这需要在打包之前进行配置。或者,xcopy安装也可以。

想法?

回答

1

使用特定于您希望部署到的每个环境的设置,创建一个包含配置文件的主项目的子文件夹。在构建/部署时,这些文件将被推送到bin文件夹或部署目标的子目录中。于是,无论是定义一个MSBuild脚本,VS生成后的行为或犯一个安装包处理(也许所有的上面),要么:

  • 修改的app.config引用所需的孩子配置文件明确,或
  • 将其中一个子配置复制到app.config正在查找的预定义位置和名称。

从主的app.config或web.config中的子文件的引用可能看起来像:

<connectionStrings configSource="MySeperateConnStringsFile.config" /> 
<appSettings configSource="MySeperateAppSettingsFile.config" /> 

为此,您可以使用自定义配置节为好;只要确保像通常那样在主文件的configSections区域中设置这些部分即可。

2

更新01/09/2012 - 我开始使用团队建设这个项目,并没有想我的构建机器上安装的Windows SDK。我做了一些研究并偶然发现了SlowCheetah,这是的方式去为此。还有一个blog post用于使用Team Build启动和运行。


对app.config文件的Visual Studio XML转换。扩展为网络人员提供的内容。虽然我没有看到它,但下面是设置它的很好的资源:

您可以从。this article获取.targets文件以及如何使用它的说明。请确保您阅读文章末尾处的更新以获取最新信息。

您还需要Vishal Joshi's blog中的信息来描述如何设置项目中的所有内容。简单的事情,比如让.config文件在解决方案资源管理器中相互嵌套,会给我带来欢乐!

如果你还没有它,你需要安装.NET Framework 4.0 SDK,因为转换的东西使用了一个工具。

这些文章有提示和链接让你继续转换语法。看到一两个样本后,它非常简单。

祝你好运!