程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .net 實戰 根據configuration選項生成不同的config文件,configconfiguration

.net 實戰 根據configuration選項生成不同的config文件,configconfiguration

編輯:關於.NET

.net 實戰 根據configuration選項生成不同的config文件,configconfiguration


項目開發過程中都會遇到的問題,開發環境的配置肯定是和生產環境不一樣的,
一直都是重復手動拷貝,但是配置太多拷貝的弊端就顯現出來了,
為了解決這個問題可以有幾種方案:

1.Web.config Transformation

Transformation的相關知識點可以參考下面的文章,

這個東西有個不好的地方,就是只有在publish的時候才執行,在開發調試期間是不起作用的,

所以一般應用在網站發布期間

https://msdn.microsoft.com/en-us/library/dd465326(v=vs.110).aspx

http://www.cnblogs.com/worksguo/archive/2009/08/29/1556307.html


2.MSBuild 在BuildBefore事件中應用XslTransformation

 示例代碼: https://github.com/xlb378917466/MSBuild_BuildBefore

知識點學習:http://www.cnblogs.com/shanyou/p/3452938.html

 

這個功能很強大,這裡使用了BuildBefore事件,這樣在開發調試期間就可以獲取到修改之後的配置,

    <Target Name="BeforeBuild">
    <XslTransformation Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" XslInputPath="Debug.xslt" XmlInputPaths="WebTemplate.config" OutputPaths="Web.config" />
    <XslTransformation Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'" XslInputPath="Release.xslt" XmlInputPaths="WebTemplate.config" OutputPaths="Web.config" />
  </Target>

這裡定義了兩個xslt文件用來輸出最終的web.config文件,當然你要自己定義一個原始的輸入文件WebTemplate.config,

這個例子簡單的APPSetting中的值根據實際的Configuration進行修改

<appSettings>
    <add key="Mode" value="Release" />
  </appSettings>

 Debug.Xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
 <xsl:template match="@*|node()">
   <xsl:copy>
     <xsl:apply-templates select="@*|node()" />
   </xsl:copy>
 </xsl:template>
<xsl:template match="/configuration/appSettings/add[@key='Mode']">
 <add key="Mode" value="Debug"/>
</xsl:template>
</xsl:stylesheet>

 Release.Xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
 <xsl:template match="@*|node()">
   <xsl:copy>
     <xsl:apply-templates select="@*|node()" />
   </xsl:copy>
 </xsl:template>
<xsl:template match="/configuration/appSettings/add[@key='Mode']">
 <add key="Mode" value="Release"/>
</xsl:template>
</xsl:stylesheet>

 

 

3.通過Symbols(條件編譯)來使用C#代碼控制

  參考之前的一篇文章:條件編譯  

這種做法一般是在加載其他XML之類的配置時才用得到,至少我是這個時候用的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved