Подтвердить что ты не робот

Отключите автоматическое форматирование для #region в Visual Studio 201x

Есть ли способ отключить автоматическое форматирование для произвольных регионов в Visual Studio?

У меня есть автоматическое форматирование, настроенное на отступ точно так, как мне нравится. Тем не менее, для определенного региона (в частности, для создания XML-документа) я хотел бы, чтобы отступы очищали структуру создаваемого XML-документа, а не С#, который ее создает. Например:

// 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 становится амбициозной и пытается отменить мою работу.

4b9b3361

Ответ 1

Насколько я знаю, нет никакой функции, которая бы отличалась поведению внутри одного и того же файла в Visual Studio, и есть только запрос функции для 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.

Ответ 2

Как уже было сказано, в 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());
}