我的团队爱上了发布个人资料。我们有许多测试环境,使用Web.config转换,我们可以替换每个环境中的机器名称,配置设置等,这使我们的构建/部署/测试过程更加容易。
例如:
Web.config
Web.dev.config
Web.int.config
Web.prod.config
但是,我们有许多测试应用程序用于访问我们的Web服务,实现为控制台应用程序。我们希望能够在这些配置文件上进行相同类型的转换,这样我们就可以在拾取构建丢弃时减少与手动编辑配置文件相关的测试手动劳动。
基本上,我们想要这个:
App.config
App.dev.config
App.int.config
App.prod.config
我对这些配置转换的理解是它们与我们的Web项目中相应的发布配置文件相关:
Properties
PublishProfiles
dev.pubxml
int.pubxml
prod.pubxml
我试图将相似的文件添加到我们的控制台应用项目中,但我怀疑它是Web发布MSBuild目标中实际使用它们的东西。
有没有办法专门挂钩构建的这一部分,以便我们可以转换非Web配置?
答案 0 :(得分:8)
将多个app.configs添加到控制台应用程序:
我正在使用visual studio 2013.在这个版本中,我们没有配置转换。请安装configuration transformation extension。
首先在解决方案配置中添加环境。右键单击App.config
文件。单击Add config Transform。它增加了解决方案配置的数量。
在App.config
:
<appSettings>
<add key="key" value="some value" />
</appSettings>
在App.Release.Config
中复制此代码:
<appSettings>
<add key="same key which you have given in app.config" value="some new value" xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>
最后,构建解决方案。
答案 1 :(得分:3)
我发现最简单的解决方案是使用Slowcheetah;他们在他们的网站上有使用MSBuild等的教程,我相信在从Dev推送到QA等之后可以正常切换。
http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5
它对我有用:)
答案 2 :(得分:2)
我一直在寻找一个简单的Azure WebJobs项目解决方案,用于在构建期间转换App.config,该服务器与服务器上的Visual Studio和MSBuild一起使用。
对于Azure WebJobs项目,添加到.csproj
之后有所帮助:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile" Condition="Exists('App.$(configuration).config')">
<Message Text="Transforming config files..." Importance="high" />
<TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" />
<PropertyGroup>
<AppConfig>$(IntermediateOutputPath)$(TargetFileName).config</AppConfig>
</PropertyGroup>
<ItemGroup>
<AppConfigWithTargetPath Remove="App.config" />
<AppConfigWithTargetPath Include="$(AppConfig)" Condition="'$(AppConfig)'!=''">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
使用build,不需要扩展,App.config也不会被覆盖。基于Dhia Louhichi's answer.
答案 3 :(得分:1)
我建议发布这篇博文:
http://blogs.msdn.com/b/webdev/archive/2010/11/17/xdt-web-config-transforms-in-non-web-projects.aspx
它解释了如何在WPF项目配置文件中使用xdt转换。我按照这些说明进行了一些控制台应用程序,它运行良好。我正在使用VS2012 Express,但我想它也适用于VS2010。
答案 4 :(得分:0)
最近我设置了一个构建服务器,这就是我最终使用的内容:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="BeforeBuild" Condition="">
<Message Text="Transforming Configs files..." Importance="high" />
<TransformXml Source="App_Data\config\appSettings.config" Transform="App_Data\config\appSettings.$(Configuration).config" Destination="App_Data\config\appSettings_temp.config" />
<Copy SourceFiles="App_Data\config\appSettings_temp.config" DestinationFiles="App_Data\config\appSettings.config" OverwriteReadOnlyFiles="True" />
<Delete Files="App_Data\config\\appSettings_temp.config" />
</Target>
说明: