Visual Studio 中非 Web 项目的项目的 App.Config 转换?

2023-12-04

对于基于 Visual Studio 2010 Web 的应用程序,我们具有配置转换功能,通过该功能我们可以为不同的环境维护多个配置文件。但相同的功能不适用于 Windows 服务/WinForms 或控制台应用程序的 App.Config 文件。

有一个可用的解决方法,如下所示:将 XDT 魔法应用于 App.Config.

但这并不简单,需要执行许多步骤。有没有更简单的方法可以对 app.config 文件实现相同的效果?


我尝试了几种解决方案,这是我个人发现的最简单的解决方案。
Dan在评论中指出原帖属于奥列格·赛奇谢谢,奥列格!

以下是说明:

1. 将每个配置的 XML 文件添加到项目中。

通常你会有Debug and Release配置所以命名你的文件App.Debug.config and App.Release.config。在我的项目中,我为每种环境创建了一个配置,因此您可能想尝试一下。

2.卸载项目并打开.csproj文件进行编辑

Visual Studio 允许您编辑.csproj文件就在编辑器中 - 您只需先卸载项目即可。然后右键单击它并选择编辑 .csproj.

3. 将App.*.config文件绑定到主App.config

找到包含所有内容的项目文件部分App.config and App.*.config参考。您会注意到他们的构建操作设置为None没关系:

<None Include="App.config" />
<None Include="App.Debug.config" />
<None Include="App.Release.config" />

接下来,将所有特定配置 files 依赖的在主要的App.config因此 Visual Studio 将它们分组,就像它对设计器和代码隐藏文件一样。

将上面的 XML 替换为下面的 XML:

<None Include="App.config" />
<None Include="App.Debug.config" >
  <DependentUpon>App.config</DependentUpon>
</None>
<None Include="App.Release.config" >
  <DependentUpon>App.config</DependentUpon>
</None>

4.激活变形魔法(对于 Visual Studio 版本仍然需要,例如VS2019)

在文件末尾之后

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

并在决赛之前

</Project>

插入以下 XML - 请注意要进行正确的转换需要两个步骤:

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="BeforeBuild" Condition="Exists('App.$(Configuration).config')">
    <!-- Generate transformed app config and replace it: will get the <runtime> node and assembly bindings properly populated -->
    <TransformXml Source="App.config" Destination="App.config" Transform="App.$(Configuration).config" />
  </Target>
  <Target Name="AfterBuild" Condition="Exists('App.$(Configuration).config')">
    <!-- Generate transformed app config in the intermediate directory: this will transform sections such as appSettings -->
    <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
    <!-- Force build process to use the transformed configuration file from now on.-->
    <ItemGroup>
      <AppConfigWithTargetPath Remove="App.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>

现在您可以重新加载项目,构建它并享受App.config转变!

FYI

确保您的App.*.config文件有这样的正确设置:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
     <!--magic transformations here-->
</configuration>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 中非 Web 项目的项目的 App.Config 转换? 的相关文章

随机推荐

  • 如何将Streamreader数据转换为XmlDocument?

    在 C 中 我试图调用返回 XML 文件的 Web 服务 我可以向 Web 服务发出 HttpWebRequest 并将输出存储在 StreamReader 中 但是如何将这些数据转换为 XMLDocument 呢 Use XmlDocum
  • 使用数组输入和变量Where语句的LINQ查询 - 建议

    我想使用 Silverlight 客户端 API 通过 WCF 数据服务查询给定数组进行过滤的数据 基本上 我想查询给定状态列表 数组 的员工 我在想这样的事情 public IQueryable
  • 将字符串转换为流

    我正在尝试将字符串转换为字节流 以便我可以读取所述流 所以我正在做的是将字符串转换为字符数组 并将每个字符 字节写入 MemoryStream 稍后将其包装在 BinaryReader 中 我尝试实现它的方式是这样的 let readDat
  • 在函数中调用 componentDidMount 是不好的做法吗?

    我的 ReactJS 应用程序中有一个函数 它向服务器发送 axios POST 请求以从数据库中删除某个元素 基本上 我有一个列表 我可以从中删除某些项目 但是 React 仅显示刷新页面后删除元素所做的更改 这是我使用的删除功能 han
  • 如何在android studio中创建自定义字体

    我需要向我的项目添加新字体 我在 android studio 中哪里创建它 有人可以建议我是否在 android studio 的正确目录中创建它吗 我尝试将 fonts 文件夹放在与 SRC 文件夹相同的位置 但没有成功 我的代码是 T
  • 计算 dplyr 中列子集的按行计数

    我想使用 dplyr 跨列子集按行计算某些文本 或因子级别 的实例数 这是输入 gt input df num col 1 num col 2 text col 1 text col 2 1 1 4 yes yes 2 2 5 no yes
  • 卡在带有 bool 返回值的简单单参数 lambda 上

    我被困在 lambda 上 只有一个int参数和一个bool返回值 Expression
  • 当旋转到横向时,JQuery Mobile Beta 1 不会调整 iPhone 上的屏幕大小

    我正在使用 JQUery Mobile Beta 1 编写移动应用程序 并期望当从纵向旋转到横向时 屏幕应该在 iphone 上自动调整 反之亦然 但它没有发生 我只是通过打开此链接进行了检查 Beta 1 文档演示 http jquery
  • C# 整数位运算符

    这个表达实际上是什么意思 注意 x 和 y 变量只是示例值 int x 3 int y 1 if x y 0 我继承了一个代码库 但不太了解按位运算符 我已经读过 但仍然缺少一些东西 帮助 它比较每个值中的位 它返回两个数字中设置的任何位
  • Netbeans (12x)/Maven 包含并加载嵌入式资源?

    简单的问题 使用 Netbeans 12x 时如何从基于 Maven 的项目包含和加载嵌入式资源 在传统 基于 Ant 的项目中 可以简单地将嵌入式资源放置在Source Package并使用加载它Class getResource 但由于
  • 二进制补码 VHDL

    我只是想用 VHDL 制作一个简单的二进制补码设备 但它抛出了这个非常烦人的错误 我不确定我做错了什么 可能是一些非常愚蠢的事情 错误是 错误 10327 twocompliment vhd 21 处的 VHDL 错误 无法确定运算符 na
  • JavaFx 中 BACKSPACE 的键码事件

    我正在 JavaFX 中做一个项目 使用 Java 8 和Gluon 场景构建器 我想检测什么时候backspace被压入一个TextField 这是我正在使用的代码 public void keyPressed KeyEvent kEve
  • Android破坏活动、杀死进程

    你好 我想知道 Android 是如何管理内存的 但我在任何地方都找不到准确的答案 假设我的应用程序在当前活动堆栈上有 5 个活动 4 个已停止 1 个已恢复 没有连接服务 我按 主页 按钮 这样我的所有活动都会停止 我启动了其他一些消耗内
  • 是否可以在 Makefile 中创建多行字符串变量

    我想创建一个多行字符串的 makefile 变量 例如电子邮件发布公告的正文 就像是 ANNOUNCE BODY Version VERSION of PACKAGE NAME has been released It can be dow
  • 当输出可以是非 ASCII 时,为什么要使用 fopen() 模式“b”(stdio.h)?

    带有C标准库stdio h 我读到要输出 ASCII 文本数据 应该使用模式 w 要输出二进制数据 应该使用 wb 但为什么会有这样的差异呢 无论哪种情况 我都只是输出一个字节 字符 数组 对吧 如果我以 ASCII 模式输出非 ASCII
  • Sublime text:将多个相邻的空格合并为一个

    如何在 Sublime Text 中执行此操作 aaa bbb ccc ddddddd 应该转换为 aaa bbb ccc ddddddd This can also be done with a regex search and repl
  • 如何禁用 Angular ui 路由器状态的数据继承

    如何禁用角度中的子状态UI router继承其父状态的数据 例如 我有一个父子状态如下 stateProvider state parent data customData1 Hello state parent child data 这里
  • 在 VSCode 中禁用 python 关键字的悬停提示

    I want to disable hover hint for python keyword for example import but preserve linter message How can I do this 更新 sett
  • jQuery 可在浏览器之外拖动

    目前 无需使用 jQuery 就可以将图像从浏览器拖到桌面上 firefox chrome safari 我想使用 jQuery Draggable 来实现同样的事情 目前 如果我尝试拖动 可拖动 元素 该元素在离开浏览器窗口时就会消失 如
  • Visual Studio 中非 Web 项目的项目的 App.Config 转换?

    对于基于 Visual Studio 2010 Web 的应用程序 我们具有配置转换功能 通过该功能我们可以为不同的环境维护多个配置文件 但相同的功能不适用于 Windows 服务 WinForms 或控制台应用程序的 App Config