C# 在VS代码中禁用特定编译器警告
我想知道如何在整个项目中禁止VS代码中的特定编译器警告。C# 在VS代码中禁用特定编译器警告,c#,compiler-warnings,visual-studio-code,suppress-warnings,C#,Compiler Warnings,Visual Studio Code,Suppress Warnings,我想知道如何在整个项目中禁止VS代码中的特定编译器警告。 我看过这个queston:但它是针对VisualStudio的,而不是VisualStudio代码 以下是在上面链接的问题中推荐的答案: 1. 解决方案资源管理器查看属性生成抑制警告 和 2. #杂注警告禁用警告列表 对于#1:我在VS代码中的任何地方都找不到解决方案资源管理器 对于#2,仅当我将其包含在每个脚本的顶部时,这才有效。我需要一种方法来完成整个项目 更新: 我尝试在.csproj文件中使用016998019,但没有成功 查看最
我看过这个queston:但它是针对VisualStudio的,而不是VisualStudio代码 以下是在上面链接的问题中推荐的答案:
1. <代码>解决方案资源管理器
查看
属性
生成
抑制警告
和
2. <代码>#杂注警告禁用警告列表 对于#1:我在VS代码中的任何地方都找不到解决方案资源管理器 对于#2,仅当我将其包含在每个脚本的顶部时,这才有效。我需要一种方法来完成整个项目 更新: 我尝试在.csproj文件中使用
016998019,但没有成功
查看最后的更改后,我注意到它已恢复为0169
。然后我意识到我需要的是0169;8019
。将,
切换为代码>解决了问题
事实证明,上述解决方案根本不起作用。当我重新启动VS代码时,所有的警告都回来了。也许我需要的错误代码不是8019,即使它在#pragma
语句中作为错误代码工作。
中使用的代码是否与#pragma
语句末尾使用的代码不同
对于那些说太多转向VS社区的人来说,这不是重点。我正在使用VS代码作为文本编辑器和Unity编辑器。我正在查找需要更改的文件以及需要进行哪些更改,以便将类似于#pragma warning disable 8019
的语句应用于整个项目。我能够实现这一点。我的解决方案如下所示:
netcoreapp2.1
2.1.1
0169;8019
是PascalCase而不是camelCase,元素嵌套在
中,我终于能够通过在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;
}
}
}
使用System.IO;
使用System.Text.RegularExpressions;
使用UnityEngine;
使用UnityEditor;
[初始化加载]
类FixCSProjs:AssetPostprocessor
{
生成的CSprojectFiles()的私有静态无效{
Log(“修复csproj文件…”);
var dir=Directory.GetCurrentDirectory();
var files=Directory.GetFiles(dir,“*.csproj”);
foreach(文件中的var文件){
固定项目(文件);
}
}
静态布尔修复项目(字符串文件){
var text=File.ReadAllText(文件);
var find=“[0-9;]+)”;
var replace=“$1;3003;3009”;
if(Regex.IsMatch(text,find)){
text=Regex.Replace(text,find,Replace);
WriteAllText(文件,文本);
返回true;
}否则{
返回false;
}
}
}
这将在Unity每次自动生成csproj文件时,向每个csproj文件的NoWarn
属性添加额外的警告代码。这有一个重要的优点,即它不需要手动编辑Unity自动生成的文件,这意味着它更健壮,适合包含在git之类的代码库中
在我的例子中,我禁用了警告3003和3009(CLS合规性警告),但只是替换3003;3009
在我的代码中,使用您想要的任何分号分隔的警告代码,它应该可以做到这一点
我还想说,这是一个令人发指的解决方案,我真的希望有一个更好、更干净的方法来实现这一点。你是说上面的1不起作用吗?如果是,您看到了什么?VS代码没有解决方案资源管理器。如果有的话,我找不到。我将澄清这一点。从链接中的答案:在解决方案资源管理器中,选择要在其中抑制警告的项目。编辑您的项目属性(在您的解决方案下)。在VS代码中,我在哪里可以找到解决方案资源管理器?现在您已经说明您使用的是Visual Studio代码,而不是Visual Studio,很遗憾,我无法为您提供帮助,因为我对此不熟悉。也许一个好的选择是Visual Studio社区版,它是免费的,功能更强大。