5

我们正在使用 Team Build 来处理我们对开发服务器的部署,并且我们需要在转换时从我们的 Web 配置中删除注释。有谁知道如何<!-- -->使用转换从 Web 配置文件中删除注释行?

4

3 回答 3

3

我找到了答案。这似乎是 Visual Studio/Team Build 中 XDT 转换引擎中的一个已知错误。这个错误是在三月份报告的,所以不知道什么时候会修复。

这是链接

编辑:此链接实际上与原始问题无关。我们最终认为使用内置的 Web 配置转换是不可能的。所以我们最终编写了一个控制台应用程序来去除注释,并正确格式化转换后的文件。

于 2010-06-04T12:42:16.307 回答
2

这是我的功能。您可以将其添加到辅助类:

public static string RemoveComments(
        string xmlString,
        int indention,
        bool preserveWhiteSpace)
    {
        XmlDocument xDoc = new XmlDocument();
        xDoc.PreserveWhitespace = preserveWhiteSpace;
        xDoc.LoadXml(xmlString);
        XmlNodeList list = xDoc.SelectNodes("//comment()");

        foreach (XmlNode node in list)
        {
            node.ParentNode.RemoveChild(node);
        }

        string xml;
        using (StringWriter sw = new StringWriter())
        {
            using (XmlTextWriter xtw = new XmlTextWriter(sw))
            {
                if (indention > 0)
                {
                    xtw.IndentChar = ' ';
                    xtw.Indentation = indention;
                    xtw.Formatting = System.Xml.Formatting.Indented;
                }

                xDoc.WriteContentTo(xtw);
                xtw.Close();
                sw.Close();
            }
            xml = sw.ToString();
        }

        return xml;
    }
于 2011-09-27T15:44:53.387 回答
1

如果您有小部分想要删除评论,您可能愿意使用替换转换。

基础 web.config 文件:

<system.webServer>
    <rewrite>
        <rules>
            <clear />
            <!-- See transforming configs to see values inserted for builds -->
        </rules>
    </rewrite>

web.release.config 转换(替换没有评论的内容):

<system.webServer>
<rewrite >
  <rules xdt:Transform="Replace">
    <clear/>
    <rule name="Redirect to https" stopProcessing="true" >
      <match url="(.*)" />
      <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>

导致最终发布的配置:

<system.webServer>
<rewrite>
  <rules>
    <clear />
    <rule name="Redirect to https" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>

您最终可能会使用这种方法将大量配置从基础复制到转换文件,但在小情况下可能是合适的......

就我而言,我不想在我的基础中重写规则,但我发表评论告诉其他开发人员查看转换以获取更多信息,但我不希望在最终版本中发表评论。

于 2016-12-18T09:03:21.580 回答