在VS代码中禁用特定的编译器警告

问题描述 投票:13回答:2

我想知道如何在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>,但没有去。

在审查了最后的更改后,我注意到它已恢复为<noWarn>0169</noWarn>。然后我意识到我需要的是<noWarn>0169;8019</noWarn>。切换,;解决了这个问题。

嗯,事实证明上述解决方案毕竟不起作用。一旦我重新启动VS Code,所有警告都会恢复。也许我需要的错误代码不是8019,即使它在#pragma语句中作为错误代码工作。 <noWarn>中使用的代码是否与#pragma语句末尾使用的代码不同?

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

c# compiler-warnings visual-studio-code suppress-warnings
2个回答
1
投票

我能够让这个工作。我的解决方案看起来像这样:

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

<NoWarn>是PascalCase而不是camelCase,该元素嵌套在<PropertyGroup>中。


0
投票

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;
        }
    }
}

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.