【问题标题】:Disabling a specific compiler warning in VS Code在 VS Code 中禁用特定的编译器警告
【发布时间】:2021-12-29 00:11:15
【问题描述】:

我想知道如何在 VS Code 中为整个项目抑制特定的编译器警告。
我见过这个问题:Is it possible to disable specific compiler warnings? 但它是针对 Visual Studio,而不是 Visual Studio Code。

以下是上面链接的问题中推荐的答案:
1. Solution Explorer > View > Properties > Build > Suppress Warnings

2.#pragma warning disable warning-list

对于 #1:我在 VS Code 中的任何地方都找不到解决方案资源管理器。

对于#2 这只有在我将它包含在每个脚本的顶部时才有效。我需要一种方法来为整个项目这样做。

更新:

我尝试在我的 .csproj 文件中使用 <noWarn>01699,8019</noWarn>,但没有成功。

查看最后的更改后,我注意到它已恢复为&lt;noWarn&gt;0169&lt;/noWarn&gt;。然后我意识到我需要的是noWarn>0169;8019</noWarn>。将, 切换为; 即可解决问题。

好吧,事实证明,上述解决方案根本不起作用。一旦我重新启动 VS Code,所有的警告都回来了。也许我需要的错误代码不是 8019,即使它在 #pragma 语句中用作错误代码。 &lt;noWarn&gt; 中使用的代码与#pragma 语句末尾使用的代码是否不同?

对于那些说也切换到 VS 社区的人来说,这不是重点。我正在使用 VS Code 作为文本编辑器 with Unity Editor。我正在寻找需要更改的文件以及需要进行哪些更改才能将#pragma warning disable 8019 之类的语句应用于整个项目。

【问题讨论】:

  • 您是说上面的#1 不起作用吗?如果是这样,你看到了什么?
  • VS Code 没有解决方案资源管理器。或者如果有,我找不到。我会澄清这一点。
  • 从链接中的答案:在解决方案资源管理器中,选择要禁止显示警告的项目。编辑您的项目属性(在您的解决方案下)。
  • 我在哪里可以找到 VS Code 中的解决方案资源管理器?
  • 现在您已经澄清您使用的是 Visual Studio Code,而不是 Visual Studio,很遗憾,我无法为您提供帮助,因为我对此并不熟悉。也许一个不错的选择是免费且功能更强大的 Visual Studio 社区版。

标签: c# compiler-warnings visual-studio-code suppress-warnings


【解决方案1】:

我能够让它工作。我的解决方案如下所示:

<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <RuntimeFrameworkVersion>2.1.1</RuntimeFrameworkVersion>
    <NoWarn>0169;8019</NoWarn>
</PropertyGroup>

&lt;NoWarn&gt; 是 PascalCase 而不是 camelCase,并且元素嵌套在 &lt;PropertyGroup&gt; 内。

【讨论】:

    【解决方案2】:

    Thanks to some code posted by user rakkarage on the Unity forums 我终于能够通过在我的 Unity 项目中创建以下编辑器脚本来解决这个问题:

    using System.IO;
    using System.Text.RegularExpressions;
    using UnityEngine;
    using UnityEditor;
    
    [InitializeOnLoad]
    class FixCSProjs : AssetPostprocessor
    {
        private static void OnGeneratedCSProjectFiles() {
            Debug.Log("Fixing csproj files...");
            var dir = Directory.GetCurrentDirectory();
            var files = Directory.GetFiles(dir, "*.csproj");
            
            foreach (var file in files) {
                FixProject(file);
            }
        }
        
        static bool FixProject(string file) {
            var text = File.ReadAllText(file);
            var find = "<NoWarn>([0-9;]+)<\\/NoWarn>";
            var replace = "<NoWarn>$1;3003;3009</NoWarn>";
            
            if (Regex.IsMatch(text, find)) {
                text = Regex.Replace(text, find, replace);
                File.WriteAllText(file, text);
                return true;
                
            } else {
                return false;
            }
        }
    }
    

    这将在每次由 Unity 自动生成的每个 csproj 文件的 NoWarn 属性中添加额外的警告代码。这有一个重要的优势,它不涉及手动编辑 Unity 自动生成的文件,这意味着它更健壮,适合包含在 git 等代码存储库中。

    在我的情况下,我禁用了警告 3003 和 3009(CLS 合规警告),但只需将我的代码中的 3003;3009 替换为您想要的任何分号分隔的警告代码,它应该可以解决问题。

    我还想说这是一个令人发指的解决方案,我真的希望有一种更好、更清洁的方法来实现这一点。

    编辑:此解决方案不再适用于最新版本的 Unity,因为它不再调用 OnGeneratedCSProjectFiles()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多