13

Czy jest jakiś sposób wyłączenia automatycznego formatowania dla dowolnych regionów w Visual Studio?Wyłącz automatyczne formatowanie dla # regionu w Visual Studio 201x

Mam automatyczne formatowanie do wcięcia dokładnie tak, jak lubię. Jednak w przypadku konkretnego regionu (w szczególności związanego z tworzeniem dokumentu XML), chciałbym, aby wcięcie wyjaśniało strukturę tworzonego dokumentu XML, a nie C#, który go tworzy. Na przykład:

// 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 

    } 
} 

Oczywiście nie oczekuję, Visual Studio, aby odgadnąć, jak sformatować, co robię, ale wolałbym nie tylko spróbować w tym regionie. W przeciwnym razie za każdym razem, gdy edytuję linię, VS staje się ambitny i próbuje cofnąć moją pracę.

+0

bardzo kiepskie rozwiązanie: var x___x = x; var x_______x = x; x ___ x.WriteStartElement ("ChildElement1"); etc ... –

+0

@ ralf.w. Naprawdę niezręcznie, ale przyznaję, że działa ... – Tenner

Odpowiedz

8

O ile mi wiadomo, nie ma funkcji, która miałaby inne zachowanie w obrębie tego samego pliku w Visual Studio i jest tylko żądanie funkcji dla Resharper, aby dodać dokładnie to. Ale to jeszcze nie zostało rozwiązane, a Resharper nie został wymieniony jako dostępny.
Chciałbym mieć rozwiązanie innego biednego człowieka, które również wspiera intencję, którą próbujesz podążać, aby połączyć zestawienia o tej samej głębi stylu. Możesz dodać {} -brackets, aby zamknąć rzeczy logicznie związane z tym, co robisz. Więc formowanie pozostanie.

potencjalną wadą (jeśli to w ten sposób zobaczyć) to masz więcej linii z powodu nawiasach:

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 

    } 

To tylko odnosi się do kwestii OP zachować wcięcie przykład problemu. Nie wyłącza części pliku, tak jak pyta @Noseratio.

+0

Miły i bezczelny: P – Bimal

4

Jak już powiedziałeś @Uwe, nie ma w VS możliwości, aby to zrobić. Jest to oferowane wyłącznie jako obejście, a nie jako odpowiedź na oryginalne pytanie. Utrzyma to formatowanie i pozwoli ci wizualnie zobaczyć strukturę XML, jak chcesz.

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()); 
} 
Powiązane problemy