13

Visual Studioで任意の領域の自動書式設定を無効にする方法はありますか?Visual Studioで#regionのオートフォーマットをオフにする201x

私は、私が好きなだけ正確にインデントするように自動書式を設定しています。しかし、特定の地域(特にXML文書の作成に関係するもの)では、作成するXML文書の構造を作成するC#ではなく、作成する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が野心的になり、自分の作業を取り消そうとします。

+0

非常に貧弱な男の解決策:var x___x = x; var x_______x = x; x ___ x.WriteStartElement( "ChildElement1");等... –

+0

@ ralf.w。本当に厄介ですが、私はそれが動作することを認めます... – Tenner

答えて

8

私が知る限り、Visual Studioの同じファイル内で異なる動作をする機能はなく、Resharperにこれを正確に追加する機能要求のみがあります。しかしそれはまだafaikに対処されておらず、Resharperは利用可能と言われていませんでした。
同じ奥行きのステートメントをスタイルにまとめるという意図をサポートしている、もうひとつの貧しい人のソリューションがあります。あなたは、あなたがやっていることの論理的なものを囲むために{} -bracketsを追加することができます。だからフォーメーションは残るでしょう。

潜在的な欠点は、(あなたはこのようにそれを見たら)あなたがあるため、ブラケットのより多くのラインを持っている:

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()); 
} 
関連する問題