16

有什么方法可以关闭 Visual Studio 中任意区域的自动格式化?

我将自动格式设置为完全按照我喜欢的方式缩进。但是,对于特定区域(特别是与创建 XML 文档有关的区域),我希望缩进清楚地表明正在创建的 XML 文档的结构,而不是创建它的 C#。例如:

// Format this normally.
public void WriteXMLDocument() {
    // ...
    using (XmlWriter x = XmlWriter.Create(filename)) {

    // Create XML document
    #region dont-format-this     // <-- Any way to get VS to recognize something like this?
        x.WriteStartDocument();
        x.WriteStartElement("RootElement");
            x.WriteStartElement("ChildElement1");
                x.WriteStartElement("GrandchildElement1a");
                    x.WriteElementString("GreatGrandchildElement1a1");
                    x.WriteElementString("GreatGrandchildElement1a2");
                x.WriteEndElement();
                x.WriteElementString("GrandchildElement1b");
            x.WriteEndElement();

            x.WriteStartElement("ChildElement2");
            x.WriteEndElement();
        x.WriteEndElement();
        x.WriteEndDocument();
    #endregion

    }
}

显然我不希望 Visual Studio 猜测如何格式化我正在做的事情,但我宁愿它只是不在这个区域内尝试。否则,每次我编辑一行时,VS 都会变得雄心勃勃并试图撤消我的工作。

4

3 回答 3

8

据我所知,在 Visual Studio 中的同一个文件中没有具有不同行为的功能,并且只有 Resharper 的功能请求来准确添加此功能。但这还没有得到解决,afaik 并且没有提到 Resharper 可用。
我会有另一个穷人的解决方案,它也支持您试图遵循的意图,以捆绑具有相同深度的风格的陈述。您可以添加 {} 括号来将逻辑上包含在您正在执行的操作中的内容括起来。所以形成会留下来。

潜在的缺点(如果你这样看的话)是因为括号你有更多的行:

    using (XmlWriter x = XmlWriter.Create(filename)) {
            // Create XML document

            #region dont-format-this     // <-- Any way to get VS to recognize something like this?

            x.WriteStartDocument();
            {
                x.WriteStartElement("RootElement");
                {
                    x.WriteStartElement("ChildElement1");
                    {
                        x.WriteStartElement("GrandchildElement1a");
                        {
                            x.WriteElementString("GreatGrandchildElement1a1");
                            x.WriteElementString("GreatGrandchildElement1a2");
                        }
                        x.WriteEndElement();
                        x.WriteElementString("GrandchildElement1b");
                    }
                    x.WriteEndElement();
                }

                x.WriteStartElement("ChildElement2");
                x.WriteEndElement();
            }
            x.WriteEndElement();
            x.WriteEndDocument();
        }
        #endregion

    }

这仅解决了 OP 问题以保持示例问题的缩进。它并没有像@Noseratio 所要求的那样禁用文件的某些部分。

于 2016-08-11T11:47:35.507 回答
4

正如@Uwe 已经说过的那样,VS 没有办法做到这一点。这仅作为解决方法提供,而不是原始问题的答案。这将保持格式并让您根据需要直观地查看 xml 结构。

var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Auto;

using (XmlWriter x = XmlWriter.Create(filename, settings))
{
    var xml = @"
        <RootElement>
            <ChildElement1>
                <GrandchildElement1a>
                    <GreatGrandchildElement1a1></GreatGrandchildElement1a1>
                    <GreatGrandchildElement1a2></GreatGrandchildElement1a2>
                </GrandchildElement1a>
            </ChildElement1>

            <ChildElement2>
            </ChildElement2>
        </RootElement>
    ";

    XDocument doc = XDocument.Parse(xml);

    x.WriteRaw(doc.ToString());
}
于 2016-08-16T17:23:36.053 回答
2

我已经为 Visual Studio 2019 Professional 16.11.5 验证了以下内容。

#pragma warning disable IDE0055
// Discard formatting in this region
#pragma warning restore IDE0055
于 2021-11-04T12:42:38.657 回答