2013-07-16 22 views
1

我们计划制作一个c#脚本来自动将重写规则从一个web.config复制到另一个web.config。我们为每个客户提供了多个web.config,我们有一些通用的重写规则,有时需要更改。一般重写规则具有唯一的前缀,将其标识为一般规则(而不是客户特定的)。将重写规则从web.config复制到另一个

我们想知道是否可以使用C#将规则从一个web.config复制到另一个web.config。只需从一个配置中读取重写url /匹配url并将其写入另一个配置文件中,可能并不总能完成这项工作;例如,我们有时也需要添加条件。

有没有办法做到这一点?我们希望尽可能自动化。我不是最好的C#,但我想可能会从一个文件中读取整个规则并将其粘贴到另一个文件中?或者,通过XMLReader解析两个web.config文件然后复制规则可能会更好吗?

+0

这是“建造时间”的变化吗?为什么不使用config [转换](http://msdn.microsoft.com/zh-cn/library/dd465326.aspx)? –

+0

否 - 这是部署后,对于这个问题,运行在网站上的web应用程序在ColdFusion 10中编码 - 所以我们不用Visual Studio来创建这个应用程序。 –

+0

考虑XML/Config包含。 – Aron

回答

0

我能够通过使用XML而不是ServerManager类自己弄清楚它。这几乎是我想要的。

XmlDocument doc1 = new XmlDocument(); 
doc1.Load(@"web.new.config"); 

XmlDocument doc2 = new XmlDocument(); 
doc2.Load(@"web.config"); 

XmlNode rules = doc2.SelectSingleNode("/configuration/system.webServer/rewrite/rules"); 
XmlNodeList baserules = doc2.SelectNodes("/configuration/system.webServer/rewrite/rules/rule[contains(@name, 'GenericPrefix')]"); 

XmlNodeList ruleList = doc1.SelectNodes("/configuration/system.webServer/rewrite/rules/rule[contains(@name, 'GenericPrefix')]"); 

foreach(XmlNode baseruleOld in baserules) 
{ 
    baseruleOld.ParentNode.RemoveChild(baseruleOld); 
} 

foreach(XmlNode rule in ruleList) 
{ 
    XmlNode tocopynode = doc2.ImportNode(rule, true); 
    rules.AppendChild(tocopynode); 
} 

doc2.Save("web.config"); 
相关问题