Отключение предупреждения о компиляторе в коде VS
Я хочу знать, как подавить конкретное предупреждение компилятора в VS Code для всего проекта.
Я видел этот запрос: Можно ли отключить специальные предупреждения компилятора?, но это для Visual Studio, а не кода Visual Studio.
Вот ответы, которые рекомендованы в указанном выше вопросе:
1. Solution Explorer
> View
> Properties
> Build
> Suppress Warnings
и
2. #pragma warning disable warning-list
Для # 1: я не могу найти Обозреватель решений в любом месте VS-кода.
Для # 2 Это работает, только если я включаю его в начало каждого из скриптов. Мне нужен способ сделать это для всего проекта.
Обновление:
Я попытался использовать <noWarn>01699,8019</noWarn
> в моих файлах .csproj, но не пошел.
После просмотра последних изменений я заметил, что он вернулся к <noWarn>0169</noWarn>
. Затем я понял, что мне нужно было < noWarn>0169;8019</noWarn>
. Переключение ,
для a ;
Решение проблемы.
Ну, оказывается, что вышеупомянутое решение не сработало. Как только я перезапустил VS Code, все предупреждения вернулись. Возможно, код ошибки мне не нужен 8019, хотя он работал как код ошибки внутри оператора #pragma
. Коды, используемые в пределах <noWarn>
, отличаются от кодов, используемых в конце инструкции #pragma
?
Для тех, кто говорит, тоже переключается на VS Community, это не так. Я использую VS Code AS текстовый редактор с Unity Editor. Я ищу, какой файл мне нужно изменить, и какие изменения нужно сделать, чтобы применить инструкцию типа #pragma warning disable 8019
к проекту целиком.
Ответы
Ответ 1
Я смог заставить это работать. Мое решение выглядит примерно так:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.1</RuntimeFrameworkVersion>
<NoWarn>0169;8019</NoWarn>
</PropertyGroup>
<NoWarn>
- это PascalCase, а не camelCase, и элемент вложен в <PropertyGroup>
.
Ответ 2
Благодаря некоторому коду, опубликованному пользователем rakkarage на форумах Unity, я наконец-то смог это исправить, создав следующий скрипт-редактор в моем проекте 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;
}
}
}
Это добавит дополнительные коды предупреждений в атрибут NoWarn
каждого файла csproj каждый раз, когда они автоматически генерируются Unity.
В моем случае я отключаю предупреждения 3003 и 3009 (предупреждения о соответствии CLS), но просто заменяю 3003;3009
в моем коде любыми кодами предупреждений, разделенными точкой с запятой, которые вы хотите, и это должно сработать.
Я также хотел бы сказать, что это отвратительное решение, и я действительно хотел бы, чтобы был лучший, более чистый способ сделать это.