在Visual Studio 201x中关闭#region的自动格式化

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都会雄心勃勃地尝试撤销我的工作。


非常简陋的解决方案:var x___x = x; var x_______x = x; x___x.WriteStartElement("ChildElement1"); 等等... - ralf.w.
@ralf.w. 真的很别扭,但我承认它确实有用... - James Cronen
3个回答

8
据我所知,在Visual Studio中,同一文件中没有不同行为的功能,只有一个请求Resharper添加这个功能的功能。但据我所知,这还没有得到解决,而且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 所问的那样禁用文件的某些部分。


好玩又俏皮 :P - Bimal

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());
}

3

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

#pragma warning disable IDE0055
// Discard formatting in this region
#pragma warning restore IDE0055

1
你是我们需要的英雄!感谢你将这个老僵尸复活了! :-) - James Cronen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接