假设我有一个成功构建的.NET项目。现在,我需要有选择地构建到不同的环境,例如DEV,QA和PROD。每个都需要自己的配置文件(例如app.config)来包含相应的连接字符串和其他设置。
我看过简单的预构建脚本,例如来自Scott Hanselman的this one。它有效,但我的问题是预构建步骤修改了源。简单地构建项目将覆盖源文件并不必要地触发源代码控制修改。
我还可以在VS / MSBuild之外查看脚本以在部署之后将配置文件放在那里,但我真的希望还有更好的方法。也许是VS / MSBuild中自包含的一种方式?
我对目标服务器的部署策略非常灵活。我考虑过一个安装项目,需要在打包之前进行配置。或者,xcopy安装也可以。
想法?
答案 0 :(得分:2)
更新01/09/2012 - 我开始在此项目中使用Team Build,并且不想在我的构建计算机上安装 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,因为转换内容使用了一个工具。
这些文章有提示和链接,可以帮助您了解转换语法。看到一两个样本后,这是非常直接的。
祝你好运!答案 1 :(得分:1)
创建包含配置文件的主项目的子文件夹,其中包含特定于您要部署到的每个环境的设置。构建/部署时,这些文件将被推送到bin文件夹或部署目标的子目录中。然后,在安装包中定义MSBuild脚本,VS后构建行为或Commit处理程序(可能是以上所有):
从主app.config或web.config到子文件的引用可能如下所示:
<connectionStrings configSource="MySeperateConnStringsFile.config" />
<appSettings configSource="MySeperateAppSettingsFile.config" />
您也可以使用自定义配置部分执行此操作;只需确保像往常一样在主文件的configSections区域中设置这些部分。