使用SlowCheetah 插件。有关如何使用 SlowCheetah 的更多选项和详细信息,请继续阅读。
正如您已经注意到的,对于库类型 (.dll) 项目,没有默认且简单的方法可以使用不同的配置文件。原因是目前的想法是:“你不需要”!框架开发人员认为您需要对可执行文件进行配置:无论是控制台、桌面、Web、移动应用程序还是其他东西。如果你开始为 dll 提供配置,你最终可能会得到我可以称之为 config hell 的东西。您可能不再(容易地)理解为什么这个和那个变量有如此奇怪的值,似乎不知从何而来。
“等一下”,- 你可能会说,“但我需要它来进行集成/单元测试,并且它是一个库!”。这是真的,这就是你可以做的(只选择一个,不要混用):
1。 SlowCheetah - 转换当前配置文件
您可以安装 SlowCheetah - 一个 Visual Studio 插件,可以为您执行所有低级 XML 戳(或转换)。它的工作方式,简要说明:
- 安装 SlowCheetah 并重新启动 Visual Studio(Visual Studio > 工具 > 扩展和更新 ... > 在线 > Visual Studio 库 > 搜索“Slow Cheetah”)
- 定义您的解决方案配置(Debug 和 Release 默认存在),您可以添加更多(在 Solution Explorer 中右键单击解决方案 > 配置管理器... > 活动解决方案配置 > 新建...
- 根据需要添加配置文件
- 右键单击配置文件> 添加转换
- 这将创建转换文件 - 每个配置一个
- 转换文件作为注入器/变更器工作,它们在原始配置文件中找到所需的 XML 代码并注入新行或改变所需的值,无论您告诉它做什么
2。摆弄 .proj 文件 - 复制重命名一个全新的配置文件
最初取自here。这是一个自定义 MSBuild 任务,您可以将其嵌入到 Visual Studio .proj 文件中。将以下代码复制并粘贴到项目文件中
<Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\Config\App.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
现在在项目中创建一个名为Config 的文件夹并在其中添加新文件:App.Debug.config、App.Release.config 等等。现在,根据您的配置,Visual Studio 将从Config 文件夹中选择配置文件,并将其复制重命名到输出目录中。因此,如果您选择了 PatternPA.Test.Integration 项目并选择了 Debug 配置,那么在构建后的输出文件夹中,您将找到一个 PatternPA.Test.Integration。 dll.config 文件,该文件从Config\App.Debug.config 复制并随后重命名。
这些是您可以在配置文件中留下的一些注释
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- This file is copied and renamed by the 'AfterBuild' MSBuild task -->
<!-- Depending on the configuration the content of projectName.dll.config
is fully substituted by the correspondent to build configuration file
from the 'Config' directory. -->
</configuration>
在 Visual Studio 中,您可以拥有类似的东西
3。在 Visual Studio 之外使用脚本文件
每个构建工具(如NAnt、MSBuild)都将提供根据配置转换配置文件的功能。如果您在构建机器上构建解决方案,这很有用,您需要更好地控制您准备发布产品的内容和方式。
例如,您可以使用网络发布 dll 的任务来转换任何配置文件
<UsingTask AssemblyFile="..\tools\build\Microsoft.Web.Publishing.Tasks.dll"
TaskName="TransformXml"/>
<PropertyGroup>
<!-- Path to input config file -->
<TransformInputFile>path to app.config</TransformInputFile>
<!-- Path to the transformation file -->
<TransformFile>path to app.$(Configuration).config</TransformFile>
<!-- Path to outptu web config file -->
<TransformOutputFile>path to output project.dll.config</TransformOutputFile>
</PropertyGroup>
<Target Name="transform">
<TransformXml Source="$(TransformInputFile)"
Transform="$(TransformFile)"
Destination="$(TransformOutputFile)" />
</Target>