我的WPF项目中有一个app.config文件,该文件使用.csproj中的以下构建目标进行转换
<!-- MSbuild Task for transforming app.config based on the configuration settings -->
<UsingTask TaskName="TransformXml"
AssemblyFile="$(SolutionDir)\packages\MSBuild.Microsoft.VisualStudio.Web.targets.12.0.4\tools\VSToolsPath\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild">
<!-- Transform the app.config into the correct config file associated to the current build settings -->
<TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="$(OutputPath)\App.config" />
<!-- Bit of .Net to get all folders and subfolders that we want to delete post-build -->
<ItemGroup>
<FoldersToClean Include="$([System.IO.Directory]::GetDirectories("$(OutputPath)"))" />
</ItemGroup>
<!-- Delete all of our localization folders and .pdb symbols. We only delete PDB files for Release builds. Debug builds we will leave them. -->
<RemoveDir Directories="@(FoldersToClean)" />
<Exec Command="del $(OutputPath)*.pdb" Condition=" '$(Configuration)'=='Release' " />
</Target>
这在编译后正确生成了App.config,并创建了转换后的QA或Production配置文件。但是我遇到的问题是以下代码使用AppName.exe.config。
string encryptedString = ConfigurationManager.AppSettings["SqlConnection"];
在做了一些阅读之后,我理解为什么会这样做。 App.config文件最终成为AppName.exe.config,以便在运行时使用。没关系;我的转变发生在后期。编译完成后,AppName.exe.config文件包含我的基本App.config文件信息,并且没有任何已转换的设置。我假设这是由于转换发生在构建后的步骤,在使用原始App.config文件生成AppName.exe.config后转换App.config。
看起来没有任何东西阻止我改变
<TransformXml Source="App.config"
Transform="App.$(Configuration).config"
Destination="$(OutputPath)\App.config" />
以便它在构建后替换AppName.exe.config文件。
<TransformXml Source="App.config"
Transform="App.$(Configuration).config"
Destination="$(OutputPath)\AppName.exe.config" />
这有什么问题吗?使用app.config和转换桌面应用程序时,没有太多帮助。我在网上看到的所有内容都是将内容转换为web配置文件。我认为这是安全的,或多或少是相同的。但是我想确保通过用转换后的App.config替换原始AppName.exe.config来确保我不会错过任何明显的副作用或问题。
答案 0 :(得分:1)
安装此https://github.com/acottais/msbuild.xdt NuGet软件包,您将能够创建类似web.config的转换。
还有其他一些Nuget软件包,它们将像web.config一样转换app.config。
前几天我使用了它,效果很好。