2010-11-17 54 views
0

IM試圖讓角色提供在多種環境中工作,並擊中牆壁 (link textasp.net更改web.config項目的值?

我應該能夠動態地設置web.congig項目的ConnectionString屬性上app_onstart到正確的DB連接如字符串來獲得它的工作...

任何人都可以告訴我如何動態地改變web.config中的項目? 即時猜測反射...

<roleManager enabled="true" defaultProvider="SqlRoleManager"> 
    <providers> 
     <clear/> 
     <add name="SqlRoleManager" type="System.Web.Security.SqlRoleProvider" connectionStringName="ISConnectionString_prod" applicationName="IS"/> 
    </providers> 
</roleManager> 

我想在上面snipet

感謝

回答

1

如果您使用的是VS2010,則可以根據您發佈的環境將其設置爲automatically apply transforms到您的配置文件。

我們使用它來設置連接字符串,支付提供商配置設置(沙盒模式,用戶名等)以及其他一些事情,比如如何處理異常。

如果您未發佈,您可以通過編輯項目文件實際將這些轉換直接掛接到構建引擎。

這使得維護非常簡單(您有一個web.config和一個包含轉換的web.Live.config)。這也使得整個過程遠不易出錯

如:

的web.config

<connectionStrings> 
    <clear /> 
    <add name="OurConnectionString" connectionString="Data Source=DevDbHostname;Initial Catalog=DevDb;user id=Username;password=Password;MultipleActiveResultSets=True" /> 
    </connectionStrings> 

web.Release.config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <add name="OurConnectionString" 
     connectionString="Data Source=LiveDbHostname;Initial Catalog=LiveDb;user id=Username;password=Password;MultipleActiveResultSets=True" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 
</configuration> 
0

調整的connectionStringName值,只要在權限允許它(你將不得不改變他們),您可以像處理其他任何XML文件一樣對待web.config。知道這一點,你可以簡單地使用一個XDocument,並彈出一個新的你想要它的地方XElement。但要非常小心,一定要保存一些備份!