【问题标题】:Copying rewrite rules from a web.config to another将重写规则从 web.config 复制到另一个
【发布时间】:2013-07-14 07:54:52
【问题描述】:

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

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

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

【问题讨论】:

  • 这是一个“构建时间”的变化吗?为什么不使用配置transformations
  • 否 - 这是部署后的结果,而且,网站上运行的 Web 应用程序是用 ColdFusion 10 编码的 - 所以我们无论如何都不会使用 Visual Studio 来创建这个应用程序。
  • 考虑 XML/Config 包括。
  • 如果您的 C# 不是那么好,并且该应用程序是冷融合应用程序,那么您用您的母语阅读 xml 会不会更简单? web.config 只是一个 XML 文件,因此您可以这样阅读它。
  • 我认为 c# 可以比 ColdFusion 做得更好。而且我在 c# 方面还不错,以至于我无法在其中编写代码;我只是不熟悉有关 XML 或 c# 中的 ServerManager 类的任何内容。

标签: c# iis web-config


【解决方案1】:

我自己可以通过使用 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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多