ASP.NET 多環境下配置文件web.config的靈活配置---轉

注意:本功能在.Net Core中已經不可用,暫時需手動修改web.config中的信息,或者將其設置在appsettings.XXX.json中,然后再使用web.config中的環境變量來制定使用的具體appsettings文件。

轉自:https://www.cnblogs.com/hugogoos/p/6426887.html

調試,發布Asp.net程序的時候,開發環境和發布環境的Web.Config往往不同,比如connectionstring等。如果常常有調試,發布的需求,就需要常常修改web.config文件,這往往是一件非常麻煩的事情。

  Web.Config Transformation能夠在不同的發布環境下,產生不同的web.config文件,非常方便和實用。

?

  在新建的Web項目中有個默認的web.config, 還可以定義格式為web.[name].config文件, 這個配置文件定義的規則, 在發布的時候, 會對web.config文件進行修改。

  默認項目中, 會創建Web.Debug.config和Web.Release.config文件,分別對應于Debug和Release環境。

?

?

  假如我們要常常發布到測試服務器上,測試服務器和開發時候的connectionstring是不同的,看看如何使用Web.Config Transformation來解決這個問題。

?

  1,首先添加Test配置

  菜單Build->Configuration Manager, 就能看到如下的配置窗口, 添加一個新的配置Test.

?

?

也可以從這而進入添加

?

?

  2,添加Test config Transformation文件

  在web.confg上,點擊右鍵,Add Config Transform, VS就會為剛剛新建的Test配置新增Transformation文件 Web.Test.config

?

?

  3.?修改Web.Test.config文件

  下面的Web.Test.config中能夠替換web.config中的connectionstring,?關鍵是這一段

?

?

  這段代碼要釋放出來的。

<add name="MyDB"   connectionString="Data Source=TestSQLServer;Initial Catalog=MyTestDB;Integrated Security=True"   xdt:Transform="Replace" xdt:Locator="Match(name)"/>

?

  xdt:Transform="Replace", 指的是用來做替換操作

  xdt:Locator="Match(name), 指的是匹配規則,這里是匹配name

  意思是用Web.Test.config中的這個配置節用來替換web.config中name為MyDB的配置

?

  4.?檢查發布的結果

  選擇在Test配置下publish網站,你能看到最終的web.config文件,已經實現了替換connection string.

?

?

  到這里已經就完成了多環境發布配置問題了,而不需要每次發布都要修改配置。

?

  這只是解決了發布時的問題,細心的同學應該發現我上面還提到了調試。

  其實有時候為了還原bug可能要鏈接不同的環境進行測試,怎么樣可以在程序編譯的時候就進行選擇不同的配置呢?

?

  首先找到當前項目

?

?

  用記事本打開拉到最下面:

?

?

  加入紅框中的這段話就可以了。

  先看看原始的配置

  web.config的配置為:

?

?

  web.debug.config的配置為:

?

?

  web.Test.config的配置為:

?

?

  這時只要選擇

?

?

  選擇重新生成解決方案,

?

?

  選擇替換,web.config配置就會被替換為web.test.config中的配置了,如下圖web.config的配置:

?

?

  connectionString的值替換為Test中的配置了。

?

<Target Name="BeforeBuild"><TransformXml Source="Web.Debug.config" Transform="Web.$(Configuration).config" Destination="Web.config" /></Target>

?

  這句話的意思就是以Web.Debug.config里面的配置為模板,生產配置存放到web.config里面

  如下圖在Debug新加一個鍵值

?

?

  在選擇Test重新生成一次

?

?

  發現多了一個Debug配置的Key.

?

  其實在編譯時支持改變配置文件會有副作用的可能會對版本控制有影響,比如,你剛改了web.config,然后你用了一個debug的配置去編譯,你的web.debug.config就會自動覆蓋web.config,然后你之前的修改就沒了。比較理想的方式是需要一個第三方的web.base.config,所有的環境配置文件,例如web.debug.config,都基于web.base.config去修改,就是以web.base.config為模板,web.config成為修改后的目標文件,本身是只讀的,不允許修改,只允許生成,同時也不簽入到版本庫。

?常用語法

參考博客?http://www.cnblogs.com/worksguo/archive/2009/08/29/1556307.html

1 :locator屬性

下面有個表,來詳細列舉locator的語法

(1)Match;

這里你需要就是在你直接匹配的屬性名。?????

復制代碼
<connectionStrings>
<add name="Northwind" connectionString="connection string detail"providerName="System.Data.SqlClient"xdt:Transform="Replace"xdt:Locator="Match(name)" />
</connectionStrings>
復制代碼

Engine會再你的Web.config中找到匹配name為Norhwind的就用上面的配置文件圖替換。?
(2)Condition?
基于XPath,在Locator中應用有邏輯性的判斷表達式。

復制代碼
 <connectionStrings>
<add name="Northwind"connectionString="connection string detail"providerName="System.Data.SqlClient"xdt:Transform="Replace"xdt:Locator="Condition(@name=’Northwind or @providerName=' System.Data.SqlClient')" />
</connectionStrings>
復制代碼

上面就是Name屬性匹配‘Norhwind’的或providerName匹配System.Data.SqlClient的配置文件節點都會被替換。?
(3)XPath?
這個就是直接寫XPath,http://www.w3.org/TR/xpath,這里是XPath的標準

<location path="c:\MySite\Admin" >
<system.web xdt:Transform="Replace" xdt:Locator="XPath(//system.web)"></system.web>
<location>

這里你會發現,這里可以寫一些列的表達式。

2: Transform 屬性

(1) Replace?
表示所有匹配的節點都是替換

<assemblies xdt:Transform="Replace">
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>

其實這里描述文件時web.release.config,將要替換的文件時Web.config .?
(2) Remove?
刪除第一匹配的元素。

<assemblies xdt:Transform="Remove">
</assemblies>

(3)RemoveAll

刪除所有匹配的元素

<connectionStrings>
<add xdt:Transform="RemoveAll"/>
</connectionStrings>

(4)Insert

插入從父節點中插入,(authorization中插入<deny users="*" />)

<authorization>
<deny users="*" xdt:Transform="Insert"/>
</authorization>

(5)SetAttributes

直接設置Attributes

<compilation  batch="false"xdt:Transform="SetAttributes(batch)">
</compilation>

(6)RemoveAttributes?
刪除出Attributes

<compilation xdt:Transform="RemoveAttributes(debug,batch)">
</compilation>

(7)InsertAfter (XPath)?
通過匹配 XPath的表達式的,找到節點,并子節點后面插入 XML

<authorization>
<deny users="AName" xdt:Transform="InsertAfter(/configuration/system.web/authorization/ allow[@roles='Admins']") />
</authorization>

(8)InsertBefore (XPath)?
通過匹配 XPath的表達式的,找到節點,并子節點前面插入 XML

<authorization>
<allow roles=" Admins" xdt:Transform="InsertBefore(/configuration/system.web/authorization/ deny[@users='*'])" />
</authorization>

(9)XSLT (filePath)

可以在外部定義 XSLT文件,來替換Web.cofig文件。

<appSettings xdt:Transform="XSLT(V:\MyProject\appSettings.xslt)">
</appSettings>

?

轉載于:https://www.cnblogs.com/ceci/p/9814396.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281853.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281853.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

英語之各類人群

工作狂&#xff1a;workaholic 月光族&#xff1a;moonlight group 電燈泡&#xff1a;third wheel 菜鳥&#xff1a;newbie 夜貓子&#xff1a;night owl 路癡&#xff1a;somebody has no sense of derection 宅男宅女&#xff1a;homebody 時尚的潮人&#xff1a;trend sett…

Wget CVE-2014-4877:FTP 符號鏈接任意文件系統訪問

Wget 爆出 CVE-2014-4877 漏洞&#xff1a;FTP 符號鏈接任意文件系統訪問。 Package: wgetVersion: 1.15-1Severity: important Upstream fix&#xff1a; http://git.savannah.gnu.org/cgit/wget.git/commit/?id18b0979357ed7dc4e11d4f2b1d7e0f5932d82aa7 References&#xf…

JavaScript 學習提升

javascript 技能提升 理解閉包 閉包&#xff0c;官方對閉包的解釋是&#xff1a;一個擁有許多變量和綁定了這些變量的環境的表達式&#xff08;通常是一個函數&#xff09;&#xff0c;因而這些變量也是該表達式的一部分。閉包的特點&#xff1a;1. 作為一個函數變量的一個引用…

Uranium UI Kit

Uranium UI Kit控件名&#xff1a;Uranium UI Ki作者&#xff1a;enisn原文鏈接&#xff1a; https://github.com/enisn/UraniumUI項目使用 Apache-2.0 開源許可協議。Uranium 是用于 .NET MAUI 的免費和開源 UI 工具包。它提供了一組控件和實用程序來構建現代應用程序。它建…

數據庫監控框架 oneproxy-monitor 開源了

OneProxy-Monitor 是數據庫監控的框架&#xff0c;通過這個框架可以快速的開發出一款數據庫的監控軟件。目前已經在這個框架下面開發出來了sql server的監控軟件oneproxy-for-sqlserver&#xff0c; postgresql的監控軟件oneproxy-for-postgresql。并且還可以作為協議成的調試軟…

java nio epoll_Java NIO 選擇器(Selector)的內部實現(poll epoll)

http://blog.csdn.net/hsuxu/article/details/9876983之前強調這么多關于linux內核的poll及epoll&#xff0c;無非是想讓大家先有個認識&#xff1a;Java NIO中的選擇器依賴操作系統內核的這些系統調用&#xff0c;我們這里只講解與linux內核相關的NIO實現&#xff0c;當然&…

Next.js 7發布,構建速度提升40%

Next.js團隊發布了其開源React框架的7版本。該版本的Next.js主要是改善整體的開發體驗&#xff0c;包括啟動速度提升57%、開發時的構建速度提升40%、改進錯誤報告和WebAssembly支持。\\Next.js是一個React框架&#xff0c;它的主要目標是在生產環境中提供出色的性能和良好的開發…

《Java多線程編程核心技術》讀后感(十五)

線程的狀態 線程對象在不同的運行時期有不同的狀態&#xff0c;狀態信息就存在與State枚舉類中。 驗證New,Runnable&#xff0c;Terminated new:線程實例化后還從未執行start()方法時的狀態 runnable&#xff1a;線程進入運行的狀態 terminated&#xff1a;線程被銷毀時的狀態 …

隊列(queue)

隊列(queue)和棧一樣支持push和pop兩個操作。但與棧不同的是,pop兩個操作。但與棧的不同的是&#xff0c;pop完成的不是取出最頂端的元素&#xff0c;而是最底端的元素。也就是說最初放入的元素能夠最先被取出&#xff08;這種行為被叫做FIFO:First In First Out&#xff0c;即…

一題多解,ASP.NET Core應用啟動初始化的N種方案[上篇]

ASP.NET Core應用本質上就是一個由中間件構成的管道&#xff0c;承載系統將應用承載于一個托管進程中運行起來&#xff0c;其核心任務就是將這個管道構建起來。在ASP.NET Core的發展歷史上先后出現了三種應用承載的編程方式&#xff0c;而且后一種編程模式都提供了針對之前編程…

java程序猿面試問缺點怎么回答_JAVA程序員面試32問,你能回答多少題

第一&#xff0c;談談final&#xff0c; finally&#xff0c; finalize的區別。第二&#xff0c;Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類&#xff0c;是否可以implements(實現)interface(接口)&#xff1f;第三&#xff0c;Static Nested Class 和 In…

ExecutorService——shutdown方法和awaitTermination方法

ExecutorService的關閉shutdown和awaitTermination為接口ExecutorService定義的兩個方法&#xff0c;一般情況配合使用來關閉線程池。 方法簡介shutdown方法&#xff1a;平滑的關閉ExecutorService&#xff0c;當此方法被調用時&#xff0c;ExecutorService停止接收新的任務并且…

WPF 簡單模仿 VSCode 界面布局

WPF 簡單模仿 VSCode 界面布局本文經原作者授權以原創方式二次分享&#xff0c;歡迎轉載、分享。WPF 簡單模仿 VSCode 界面布局作者&#xff1a;弈虎-呂女士會翻墻原文鏈接&#xff1a; https://github.com/Chen-Lin-Zhao-Wei/WPFLikeVSCode分享一篇群友這幾天自己寫的 WPF 簡…

compare()方法+使用compare方法

compare()方法 compare(lob1,lob2,amount,offset_1,offset_2) 1用于比較2個lob存儲的數據&#xff0c;比較的方式是從指定偏移量開始&#xff0c;對指定數量的字符或者字節進行比較。 2如果比較內容相同&#xff0c;返回0&#xff0c;否則返回-1或1. 3如果參數設置有誤或不合…

linux 下 mysql默認表_linux環境下mysql默認是區分表名大小寫的

在linux環境下&#xff0c;mysql默認表明是區分大小寫的&#xff0c;我們可以查看全局變量發現:mysql> show variables like lower%;-------------------------------| Variable_name | Value |-------------------------------| lower_case_file_system | OFF || lower_cas…

dot-- 資源匯總

http://graphviz.org/doc/info/attrs.htmlhttp://graphs.grevian.org/http://graphs.grevian.org/examplehttp://www.linuxdevcenter.com/pub/a/linux/2004/05/06/graphviz_dot.html轉載于:https://www.cnblogs.com/itzxy/p/7860276.html

兩將軍問題和TCP三次握手

兩將軍問題&#xff0c;又被稱為兩將軍悖論、兩軍問題&#xff0c; 是一個經典的計算機思想實驗。首先&#xff0c; 為避免混淆&#xff0c;我們需要認識到兩將軍問題雖然與拜占庭將軍問題相關&#xff0c;但兩者不是一個東西。拜占庭將軍問題是一個更通用的兩將軍問題版本&…

微信小程序開發系列五:微信小程序中如何響應用戶輸入事件

2019獨角獸企業重金招聘Python工程師標準>>> 微信小程序開發系列教程 微信小程序開發系列一&#xff1a;微信小程序的申請和開發環境的搭建 微信小程序開發系列二&#xff1a;微信小程序的視圖設計 微信小程序開發系列三&#xff1a;微信小程序的調試方法 微信小程序…

理解Object.defineProperty的作用

Object.defineProperty 是vue中雙向綁定的基礎。vue是通過數據劫持的方式來做數據綁定的&#xff0c;最核心的方法是通過 Object.defineProperty()方法來實現對屬性的劫持&#xff0c;達到能監聽到數據的變動。要實現數據的雙向綁定&#xff0c; 當使用存取器描述屬性的特性的時…

java.lang包有哪些類_Java中Lang包的工具類有哪些

Java中Lang包的工具類有哪些發布時間&#xff1a;2020-12-08 16:15:36來源&#xff1a;億速云閱讀&#xff1a;76作者&#xff1a;Leah今天就跟大家聊聊有關Java中Lang包的工具類有哪些&#xff0c;可能很多人都不太了解&#xff0c;為了讓大家更加了解&#xff0c;小編給大家總…