有没有办法在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都会雄心勃勃并试图撤消我的工作。
答案 0 :(得分:8)
据我所知,在Visual Studio中的同一文件中没有任何特性可以有不同的行为,并且Resharper只有一个功能请求才能正确添加。但是还没有解决这个问题,并且没有提到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要求。
答案 1 :(得分: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());
}