我想知道如何在整个项目的VS代码中禁止特定的编译器警告。
我见过这个问题: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这只有在我将其包含在每个脚本的顶部时才有效。我需要一种方法来完成整个项目。
更新
我尝试使用<noWarn>01699,8019</noWarn
&gt;在我的.csproj文件中,但没有去。
在审核了上次更改后,我发现它已恢复为<noWarn>0169</noWarn>
。然后我意识到我需要的是&lt; noWarn>0169;8019</noWarn>
。切换,
;
解决问题。
嗯,事实证明上述解决方案毕竟不起作用。一旦我重新启动VS Code,所有警告都会恢复。也许我需要的错误代码不是8019,即使它在#pragma
语句中用作错误代码。 <noWarn>
内使用的代码是否与#pragma
语句末尾使用的代码不同?
对于那些说太切换到VS社区的人来说,这不是重点。我正在使用VS Code AS文本编辑器和 Unity Editor。我正在寻找需要更改的文件以及将#pragma warning disable 8019
这样的语句应用于整个项目需要进行哪些更改。
答案 0 :(得分:1)
我能够使它起作用。我的解决方案如下所示:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.1</RuntimeFrameworkVersion>
<NoWarn>0169;8019</NoWarn>
</PropertyGroup>
<NoWarn>
是PascalCase而不是camelCase,并且该元素嵌套在<PropertyGroup>
中。
答案 1 :(得分: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;
}
}
}
每次Unity每次自动将它们生成时,都会在每个csproj文件的NoWarn
属性中添加额外的警告代码。这具有重要的优点,即它不涉及手动编辑Unity自动生成的文件,这意味着它更健壮,适合包含在git之类的代码存储库中。
在我的情况下,我禁用了警告3003和3009(符合CLS的警告),但只需将代码中的3003;3009
替换为所需的任何用分号分隔的警告代码,它就可以解决问题。
我也想说这是一个令人毛骨悚然的解决方案,我真的希望有一种更好,更清洁的方式来实现这一目标。