13

是否有任何方法可以關閉Visual Studio中任意區域的自動格式化?關閉Visual Studio 201x中#region的自動格式化

我有自動格式設置縮進完全按我喜歡。但是,對於特定區域(特別是與創建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都會變得雄心勃勃,並試圖撤銷我的工作。

+0

非常窮人的解決方案:var x___x = x; var x_______x = x; X ___ x.WriteStartElement( 「ChildElement1」);等等...... –

+0

@ ralf.w。真的很尷尬,但我承認它確實有效... – Tenner

回答

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所要求的那樣禁用文件的某些部分。

+0

漂亮和厚顏無恥: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()); 
} 
相關問題