福爸爸 發表於 2023-7-11 10:05:00

Visual Studio C# 多环境配置 Web.config

<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>添加解决方案配置</li><li>添加配置转换</li><li>添加应对的配置</li><li>预览转换</li><li>发布</li><li>只对生成项目生效</li><li>代码区分</li></ul></div><p></p>
<p><font color="red">开始以为像SpringBoot 那样,运行时也行效的,结果发现只对发布生效,VS里运行时不生效,凑活着用。<br>
.Net Core appsettings.json 改进了</font></p>
<p>Visual Studio 为多环境配置 Web.config<br>
不同的环境,存在不同的配置,如:数据库连接字符串,通过多配置,方便做环境切换,配置的修改</p>
<pre><code class="language-xml">&lt;!--最简单,最麻烦的做法--&gt;
&lt;configuration&gt;
&lt;appSettings&gt;

    &lt;!--正式--&gt;
    &lt;!--&lt;add key="DbConnection" value="Data Source=10.176.1.2;Initial Catalog=vipsoft;User ID=sa;Password=....;" /&gt;--&gt;
    &lt;!--测试--&gt;
    &lt;!--&lt;add key="DbConnection" value="Data Source=172.16.0.1;Initial Catalog=vipsoft;User ID=sa;Password=123456;" /&gt;--&gt;
    &lt;!--开发--&gt;
    &lt;add key="DbConnection" value="Data Source=172.16.0.2;Initial Catalog=vipsoft;User ID=sa;Password=666666;" /&gt;

&lt;/appSettings&gt;
&lt;/configuration&gt;
</code></pre>
<p>好的做法。</p>
<h3 id="添加解决方案配置">添加解决方案配置</h3>
<p>生成 -&gt; 配置管理器<br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711093825008-1173906471.png" alt="image" loading="lazy"><br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711094108917-1790216984.png" alt="image" loading="lazy"><br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711094126469-838758827.png" alt="image" loading="lazy"><br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711094154322-503576632.png" alt="image" loading="lazy"></p>
<h3 id="添加配置转换">添加配置转换</h3>
<p>右击 Web.config -&gt; 添加配置转换<br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711094220068-1585997016.png" alt="image" loading="lazy"><br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711094305587-1291658883.png" alt="image" loading="lazy"></p>
<h3 id="添加应对的配置">添加应对的配置</h3>
<p>将不同环境的配置项,添加至对应的配置文件中<br>
Web.config</p>
<pre><code class="language-xml">&lt;appSettings&gt;
    &lt;add key="Environment" value="Dev" /&gt;
&lt;/appSettings&gt;
</code></pre>
<p>Web.Test.config</p>
<pre><code class="language-xml">&lt;appSettings&gt;
    &lt;add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/&gt;
&lt;/appSettings&gt;
</code></pre>
<p>属性值 <code>xdt:Transform “SetAttributes”</code> 指示此转换的目的是更改 <code>Web.config</code> 文件中现有元素的属性值。 <code>xdt:Locator</code>属性值<code>“Match (键) ”</code>指示要修改的元素是其key属性与此处指定的属性匹配的key元素。 元素的唯一其他属性 add 是 value,这就是部署 的Web.config 文件中将发生更改的内容。 此处显示的代码会导致 value 元素的属性 <code>EnvironmentappSettings</code> 在部署的 Web.config 文件中设置为“Test”。</p>
<pre><code class="language-xml">&lt;system.web&gt;
    &lt;compilation xdt:Transform="RemoveAttributes(debug)" /&gt;
    &lt;!--
      
      在下例中,“Replace”转换将替换
      web.config 文件的整个 &lt;customErrors&gt; 节。
      请注意,由于
      在 &lt;system.web&gt; 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。
      
      &lt;customErrors defaultRedirect="GenericError.htm"
      mode="RemoteOnly" xdt:Transform="Replace"&gt;
      &lt;error statusCode="500" redirect="InternalError.htm"/&gt;
      &lt;/customErrors&gt;
    --&gt;
&lt;/system.web&gt;
</code></pre>
<p>该 <code>xdt:Transform="RemoveAttributes(debug)"</code> 属性指定要 <code>debug</code> 从 <code>system.web/compilation</code> 已部署 的 <em>Web.config</em> 文件中的元素中删除该属性。 每次部署发布版本时,都会执行此操作。</p>
<p><img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711100355902-920696362.png" alt="image" loading="lazy"></p>
<h3 id="预览转换">预览转换</h3>
<p><img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711110400844-2055576964.png" alt="image" loading="lazy"></p>
<h3 id="发布">发布</h3>
<p>修改发布配置<br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711111429649-1258137281.png" alt="image" loading="lazy"><br>
<img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711111542923-264518964.png" alt="image" loading="lazy"></p>
<h3 id="只对生成项目生效">只对生成项目生效</h3>
<p><img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711114711269-129462908.png" alt="image" loading="lazy"></p>
<h3 id="代码区分">代码区分</h3>
<pre><code class="language-c#">#if TEST

#else

#endif
</code></pre>
<p><img src="https://img2023.cnblogs.com/blog/80824/202307/80824-20230711101801390-1972673692.png" alt="image" loading="lazy"></p>


</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:VipSoft转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/17543169.html</p><br><br>
来源:https://www.cnblogs.com/vipsoft/p/17543169.html
頁: [1]
查看完整版本: Visual Studio C# 多环境配置 Web.config