C# 发布控制台应用程序 App.config自动替换
程序员文章站
2022-03-26 08:44:02
在做项目的过程中,一般都有好几套环境,如Dev环境,QA环境等,通常情况下,不同环境的某些配置文件值是不一样的,部署时手动修改的方式管理多套环境的配置文件是很累的,而且很容易出错,最好的方式是部署时根据选择的配置管理器自动生成不同的配置。 在新建的Web 应用程序中,我们会看到Web.config是 ......
在做项目的过程中,一般都有好几套环境,如dev环境,qa环境等,通常情况下,不同环境的某些配置文件值是不一样的,部署时手动修改的方式管理多套环境的配置文件是很累的,而且很容易出错,最好的方式是部署时根据选择的配置管理器自动生成不同的配置。
在新建的web 应用程序中,我们会看到web.config是下面这样的,而且发布时会自动选择web.release.config配置的值,具体可参考之前写的另一篇博客 《web.config 自动替换值》
但是其它类型的项目,比如控制台应用程序,部署时如何实现自动替换呢?
- 新建app.debug.config,app.release.config配置文件
- 在文件资源管理器中找到项目文件,用记事本软件(如notepad++)打开
-
添加propertygroup配置
<propertygroup> <projectconfigfilename>app.config</projectconfigfilename> </propertygroup>
-
在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>
-
在最后一个import标签后添加如下标签(如编译不通过,注意修改路径,我本机装的是vs2017)
<import project="$(msbuildextensionspath)\microsoft\visualstudio\v15.0\web\microsoft.web.publishing.targets" />
-
在
import
标签后面添加target
标签
<target name="afterbuild"> <transformxml source="@(appconfigwithtargetpath)" transform="$(projectconfigtransformfilename)" destination="@(appconfigwithtargetpath->'$(outdir)%(targetpath)')" /> </target>
- 在visual studio 中打开项目,重新加载解决方案,会看到app.config和web 应用程序的web.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" />