在 Visual Studio 中禁用特定代码块的代码格式

Posted

技术标签:

【中文标题】在 Visual Studio 中禁用特定代码块的代码格式【英文标题】:Disable code formatting for specific block of code in Visual Studio 【发布时间】:2019-07-17 20:42:03 【问题描述】:

如何在 Visual Studio 2017 (C# 7) 中禁用代码格式化

我有这个方法:

public CarViewModel(ICarsRepo carsRepo)

    ...

    Manufacturers = ToSelectList<Manufacturer>();
    Categories = ToSelectList<Category>();
    States = ToSelectList<State>();

我想这样格式化:

public CarViewModel(ICarsRepo carsRepo)

    ...

    Manufacturers   = ToSelectList<Manufacturer>();
    Categories      = ToSelectList<Category>();
    States          = ToSelectList<State>();

但是当我按下 Ctrl K + Ctrl D 时,它又回到了原来的样子。

#region灵感

我想要一些东西来包装特定的代码块,比如 #region:

public CarViewModel(ICarsRepo carsRepo)

    ...

    #region disable_format

    Manufacturers   = ToSelectList<Manufacturer>();
    Categories      = ToSelectList<Category>();
    States          = ToSelectList<State>();

    #endregion

#pragma灵感

或者不一定是region,也许是pragma,就像这段代码sn-p中使用的那样:

            var parameter = 0;
            var sqlCommand = $"parameter";
#pragma warning disable EF1000 // Possible SQL injection vulnerability.
            this.Database.ExecuteSqlCommand(sqlCommand);
#pragma warning restore EF1000 // Possible SQL injection vulnerability.

这更像是一种审美偏好,大多数开发人员可能并不认同,但我不时在我的代码中非常喜欢这种偏好。

【问题讨论】:

【参考方案1】:

Visual Studio (reference)

禁用格式化:#pragma warning disable format 启用格式化:#pragma warning restore format
    switch (number) 
#pragma warning disable format
        case 1:    cardinal = "one";     animal = "monkey";     break;
        case 2:    cardinal = "two";     animal = "horse";      break;
        case 3:    cardinal = "three";   animal = "pig";        break;
        case 4:    cardinal = "four";    animal = "chicken";    break;
#pragma warning restore format
    

骑士 (doc)

禁用格式化:// @formatter:off 启用格式化:// @formatter:on
    switch (number) 
        // @formatter:off
        case 1:    cardinal = "one";     animal = "monkey";     break;
        case 2:    cardinal = "two";     animal = "horse";      break;
        case 3:    cardinal = "three";   animal = "pig";        break;
        case 4:    cardinal = "four";    animal = "chicken";    break;
        // @formatter:on
    

合并

    switch (number) 
#pragma warning disable format // @formatter:off
        case 1:    cardinal = "one";     animal = "monkey";     break;
        case 2:    cardinal = "two";     animal = "horse";      break;
        case 3:    cardinal = "three";   animal = "pig";        break;
        case 4:    cardinal = "four";    animal = "chicken";    break;
#pragma warning restore format // @formatter:on
    

【讨论】:

【参考方案2】:

这不仅会禁用格式化块,还会阻止 Visual Studio 格式化您的任何声明语句。

【讨论】:

【参考方案3】:

这符合您的需要。不仅是 C#,还适用于任何语言。

Manufacturers/**/= ToSelectList<Manufacturer>();
Categories/*   */= ToSelectList<Category>();
States/*       */= ToSelectList<State>();

【讨论】:

不是它需要,但我看不出它对 VB 是如何工作的,甚至用“''”代替“/* */”。

以上是关于在 Visual Studio 中禁用特定代码块的代码格式的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Code:禁用特定文件类型的错误/警告签入

在 Razor 中禁用 Visual Studio 代码格式

如何在 Visual Studio 2015 中禁用 C# 6 支持?

如何在 Visual Studio 2017 上禁用代码分析?

如何在 Visual Studio 2008 中禁用 XAML 文件的“代码分析”?

如何在 Visual Studio Code 中临时禁用“防止脏写”功能