当前位置 博文首页 > hddd2009的博客:Asp.Net多环境Web.config配置-Web.Debug.config

    hddd2009的博客:Asp.Net多环境Web.config配置-Web.Debug.config

    作者:[db:作者] 时间:2021-06-19 12:30

    ?

    ??????? 我们在.net开发/发布过程中,需要根据环境的不同去修改一些琐碎的web.config配置,比如:调试的时候数据库连接的是localhost或者dev环境的DB,发布到Test环境时,需要将数据库连接改为TestDB,当项目上线时,我们又需要修改数据库连接为生产环境下的DB…

    ??????? 我们有可能会忘记根据环境将web.config? 改为正确的配置,就算记得,但是手动改配置的时候也会很繁琐,而且出错的概率特别高,不过.net提供了一个功能,可以在项目publish的时候选择相应的环境(Debug,Release),将Web.Debug.config或者Web.Release.config中的配置替换web.config中对应的值,这样就可以在publish的时候直接生成对应环境所需的config文件。具体做法如下:

    ??????? 1.web.config文件内容如下

      <appSettings>
        <add key="webpages:Version"              value="3.0.0.0" />
        <add key="webpages:Enabled"              value="false" />
        <add key="ClientValidationEnabled"       value="true" />
        <add key="UnobtrusiveJavaScriptEnabled"  value="true" />
        
        <add key="testKey"                       value="any value"/>
        <add key="key1"                          value="abc"/>
      </appSettings>
    
      <connectionStrings>
        <add name="connStr1"      connectionString="template content"/>
        <add name="connStr2"      connectionString="template content"/>
        <add name="connStr3"      connectionString="template content"/>
        <add name="connStr4"      connectionString="template content"/>
        <add name="connStr5"      connectionString="template content"/>
        <add name="key1"          connectionString="abcd"/>
      </connectionStrings>
    ??????? 2.Web.Release.config文件内容如下

    <appSettings >
      <add key="testKey" value="test" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
    </appSettings>
    
    <connectionStrings xdt:Transform="Replace">
      <add name="connStr1"          connectionString="release1"/>
      <add name="connStr2"          connectionString="release2"/>
      <add name="connStr3"          connectionString="release3"/>
      <add name="connStr4"          connectionString="release4"/>
      <add name="connStr5"          connectionString="release5" />
    
      <add name="some_string_else"  connectionString="release else"/>
      <add name="key1"              connectionString="release1213"/>
    </connectionStrings>
    ??????? 3.Publish后的web.config文件为:

      <appSettings>
        <add key="webpages:Version" value="3.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
        <add key="testKey" value="TestConfig test value" />
        <add key="key1" value="abc" />
      </appSettings>
      <connectionStrings>
        <add name="connStr1" connectionString="release1" />
        <add name="connStr2" connectionString="release2" />
        <add name="connStr3" connectionString="release3" />
        <add name="connStr4" connectionString="release4" />
        <add name="connStr5" connectionString="release5" />
        <add name="some_string_else" connectionString="release else" />
        <add name="key1" connectionString="release1213" />
      </connectionStrings>
    结论:

    1)如果只替换某一行配置,请参考2中Web.Release.config的appSettings配置节点

    2)如果是替换某个section,参考2中connectionStrings配置节点

    3)如果将

    <appSettings >
      <add key="testKey" value="test" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
    </appSettings>

    改为:

    <appSettings >
      <add key="testKey" value="test" xdt:Transform="Replace"/>
    </appSettings>

    则生成的web.config为:

      <appSettings>
        <!--<add key="webpages:Version" value="3.0.0.0" /> (被替换了)-->
        <add key="testKey" value="TestConfig test value" />
        <add key="webpages:Enabled" value="false" />
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
        <add key="testKey" value="any value" />
        <add key="key1" value="abc" />
      </appSettings>
    

    4)cd到project所在路径

    msbuild/p:DeployOnBuild=True /p:CreatePackageOnPublish=True /p:Configuration=Release

    就可以使用Web.Release.config publish项目了

    没有配置路径,publish后的文件目录在 ?project目录\obj\Release\Package\PackageTmp

    打开web.config可以看到已经使用了Web.Release.config文件的配置




    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ? ? ??