欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 发布控制台应用程序 App.config自动替换

程序员文章站 2022-06-22 11:32:58
在做项目的过程中,一般都有好几套环境,如Dev环境,QA环境等,通常情况下,不同环境的某些配置文件值是不一样的,部署时手动修改的方式管理多套环境的配置文件是很累的,而且很容易出错,最好的方式是部署时根据选择的配置管理器自动生成不同的配置。 在新建的Web 应用程序中,我们会看到Web.config是 ......

在做项目的过程中,一般都有好几套环境,如dev环境,qa环境等,通常情况下,不同环境的某些配置文件值是不一样的,部署时手动修改的方式管理多套环境的配置文件是很累的,而且很容易出错,最好的方式是部署时根据选择的配置管理器自动生成不同的配置。

在新建的web 应用程序中,我们会看到web.config是下面这样的,而且发布时会自动选择web.release.config配置的值,具体可参考之前写的另一篇博客 《web.config 自动替换值》

C# 发布控制台应用程序 App.config自动替换

但是其它类型的项目,比如控制台应用程序,部署时如何实现自动替换呢?

  1. 新建app.debug.config,app.release.config配置文件
  2. 在文件资源管理器中找到项目文件,用记事本软件(如notepad++)打开
  3. 添加propertygroup配置
    <propertygroup>
       <projectconfigfilename>app.config</projectconfigfilename>
    </propertygroup>
  4. 在itemgroup中找到app.debug.config和app.release.config,修改为如下
    <none include="app.config" />
    <none include="app.debug.config">
       <dependentupon>app.config</dependentupon>
    </none>
    <none include="app.release.config">
       <dependentupon>app.config</dependentupon>
    </none>
  5. 在最后一个import标签后添加如下标签(如编译不通过,注意修改路径,我本机装的是vs2017
    <import project="$(msbuildextensionspath)\microsoft\visualstudio\v15.0\web\microsoft.web.publishing.targets" />
  6. 在 import 标签后面添加 target 标签
    <target name="afterbuild">
       <transformxml source="@(appconfigwithtargetpath)" transform="$(projectconfigtransformfilename)" destination="@(appconfigwithtargetpath->'$(outdir)%(targetpath)')" />
     </target>
  7. 在visual studio 中打开项目,重新加载解决方案,会看到app.config和web 应用程序的web.config已经一样了

         C# 发布控制台应用程序 App.config自动替换

 接下来的使用方式就和web 应用程序里一样了,打开app.release.config,修改为如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/xml-document-transform">
  <appsettings>
    <add key="environment" value="qa" xdt:transform="replace" xdt:locator="match(key)" />
  </appsettings>
</configuration>

 部署时,当选择release模式时,生成的配置如下:

<add key="environment" value="qa" />

 当选择debug模式时,生成的配置仍是app.config中的配置,如下:

<add key="environment" value="dev" />

 参考文章:1.在部署 c#项目时转换 app.config 配置文件

      2.web.config 自动替换值