我非常喜欢在 Visual Studio 2010 中添加web.config 转换。另请参阅Scott Hanselman 最近在 MIX2011 上的演讲。
糟糕的是,这个功能(至少看起来)只对 web 项目可用。
在我们的解决方案中,我们有几个 Windows 服务连接到不同的数据库,具体取决于它们所部署的环境。
有没有人想出一个很好的、整洁的方法来实现类似的“app.config 转换”功能?
注意:我们使用 TFS 2010 以持续集成的方式构建我们的解决方案。
我非常喜欢在 Visual Studio 2010 中添加web.config 转换。另请参阅Scott Hanselman 最近在 MIX2011 上的演讲。
糟糕的是,这个功能(至少看起来)只对 web 项目可用。
在我们的解决方案中,我们有几个 Windows 服务连接到不同的数据库,具体取决于它们所部署的环境。
有没有人想出一个很好的、整洁的方法来实现类似的“app.config 转换”功能?
注意:我们使用 TFS 2010 以持续集成的方式构建我们的解决方案。
我知道你已经有了答案,但是今天早上我偶然发现了SlowCheetah,这是我迄今为止见过的最好的实现。还有一篇关于从 CI 服务器运行它的博客文章。
您可以对任何 XML 文件使用 XML 转换功能 - 我们一直都在这样做。它可通过 MSBuild 任务获得。
尝试将以下内容添加到您的构建脚本中:
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<TransformXml Source="Path\To\Your\Xml.config"
Transform="Path\To\Your\Xml.$(Configuration).config"
Destination="Path\To\Your\Output.config" />
I wrote nice extension to automate app.config transformation like the one built in Web Application Project Configuration Transform
使用 Luke Bennett 的回答让我走上正轨。我发现这就是我们的答案。
FTA(参见代码片段链接):
添加一个指向 App.Config 文件的新属性 ProjectConfigFileName
为每个配置添加一个版本的 App.Config,即 App.Debug.config 要将它们嵌套在 App.Config 下,请编辑您的 csproj 文件,
在 Microsoft.CSharp.targets 导入后立即将 Microsoft.Web.Publishing.targets 导入您的 csproj 文件。
在 AfterBuild 目标中调用 TransformXml 任务。注意,BeforeBuild 和 AfterBuild 目标默认被注释掉。
如果您有多个客户端程序集并且不想复制相同的配置数据,我创建了Profigurator。它将 JSON 文件作为输入并将设置应用到 app.config 或 web.config。
我写这篇文章时有点粗糙,但我目前正在生产系统上使用它进行部署,并且效果很好。