2010-11-17 22 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。但要非常小心,一定要保存一些备份!