24

我非常喜欢在 Visual Studio 2010 中添加web.config 转换。另请参阅Scott Hanselman 最近在 MIX2011 上的演讲

糟糕的是,这个功能(至少看起来)只对 web 项目可用。

在我们的解决方案中,我们有几个 Windows 服务连接到不同的数据库,具体取决于它们所部署的环境。

有没有人想出一个很好的、整洁的方法来实现类似的“app.config 转换”功能?

注意:我们使用 TFS 2010 以持续集成的方式构建我们的解决方案。

4

5 回答 5

15

我知道你已经有了答案,但是今天早上我偶然发现了SlowCheetah,这是我迄今为止见过的最好的实现。还有一篇关于从 CI 服务器运行它的博客文章。

于 2012-01-09T14:37:04.467 回答
15

您可以对任何 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" />
于 2011-05-31T12:00:34.660 回答
9

I wrote nice extension to automate app.config transformation like the one built in Web Application Project Configuration Transform

于 2012-05-26T23:06:30.637 回答
3

使用 Luke Bennett 的回答让我走上正轨。我发现这就是我们的答案

FTA(参见代码片段链接):

  1. 添加一个指向 App.Config 文件的新属性 ProjectConfigFileName

  2. 为每个配置添加一个版本的 App.Config,即 App.Debug.config 要将它们嵌套在 App.Config 下,请编辑您的 csproj 文件,

  3. 在 Microsoft.CSharp.targets 导入后立即将 Microsoft.Web.Publishing.targets 导入您的 csproj 文件。

  4. 在 AfterBuild 目标中调用 TransformXml 任务。注意,BeforeBuild 和 AfterBuild 目标默认被注释掉。

于 2011-05-31T14:49:33.383 回答
0

如果您有多个客户端程序集并且不想复制相同的配置数据,我创建了Profigurator。它将 JSON 文件作为输入并将设置应用到 app.config 或 web.config。

我写这篇文章时有点粗糙,但我目前正在生产系统上使用它进行部署,并且效果很好。

于 2012-06-11T21:48:18.163 回答