在 VS Code 中禁用特定的编译器警告
Disabling a specific compiler warning in VS Code
我想知道如何在 VS Code 中为整个项目抑制特定的编译器警告。
我看过这个问题:Is it possible to disable specific compiler warnings? 但它是针对 Visual studio,而不是 Visual Studio 代码。
以下是上面链接的问题中推荐的答案:
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 作为文本编辑器 和 Unity 编辑器。我正在寻找我需要更改的文件以及需要进行哪些更改才能将 #pragma warning disable 8019
之类的语句应用于 entire 项目。
我能够让它工作。我的解决方案看起来像这样:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.1</RuntimeFrameworkVersion>
<NoWarn>0169;8019</NoWarn>
</PropertyGroup>
<NoWarn>
是 PascalCase 而不是 camelCase,元素嵌套在 <PropertyGroup>
.
中
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>;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()
。
我想知道如何在 VS Code 中为整个项目抑制特定的编译器警告。
我看过这个问题:Is it possible to disable specific compiler warnings? 但它是针对 Visual studio,而不是 Visual Studio 代码。
以下是上面链接的问题中推荐的答案:
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 作为文本编辑器 和 Unity 编辑器。我正在寻找我需要更改的文件以及需要进行哪些更改才能将 #pragma warning disable 8019
之类的语句应用于 entire 项目。
我能够让它工作。我的解决方案看起来像这样:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.1</RuntimeFrameworkVersion>
<NoWarn>0169;8019</NoWarn>
</PropertyGroup>
<NoWarn>
是 PascalCase 而不是 camelCase,元素嵌套在 <PropertyGroup>
.
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>;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()
。