Показывать пункт контекстного меню «Подавить предупреждение» в Visual Studio 2017 для предупреждений, где опция отсутствует - PullRequest
0 голосов
/ 12 июня 2019

При работе с предупреждением кода единства CS0649 и CS0414 срабатывают, когда единица перестраивает решение, даже когда применяется атрибут единства [SerializeField].Я хочу подавить эти ложные срабатывания в источнике через контекстное меню в списке ошибок или меню быстрых действий.Я не хочу глобально отключать CS0649 и / или CS0414, потому что в случае, если [SerializeField] было забыто или не подходит, предупреждение, очевидно, полезно.

Я отредактировал csc.rspфайл и добавил /w40649 для повторного включения предупреждения в Visual Studio, однако, когда я щелкаю правой кнопкой мыши по ошибке, опция «подавить ошибку в источнике» отсутствует.Я могу вручную устранить ошибку с помощью #pragma warning disable CS0649, CS0414 и повторно включить с помощью #pragma warning restore CS0649, CS0414 Однако это очень утомительно для изменения вручную.

Я уже пробовал пункт меню «Подавить предупреждение» в Visual Studio2010 недоступен однако, похоже, это не добавило обратно элемент контекстного меню, хотя, похоже, он указан в настройке инструментов в контекстном меню> «Другие контекстные меню | Список ошибок», как и ожидалось, как ни странно.

Без подавления:

    [SerializeField]
    private bool flashCustomColor = false;

    [SerializeField, OneLine.OneLine, ShowIf("flashCustomColor")]
    private FlashingColors flashingColors;

    [System.Serializable]
    private struct FlashingColors
    {
        public Color GetHurtColor() => hurtColor ?? Color.red;

        [SerializeField]
        private Color? hurtColor;

        public Color GetNormalColor() => normalColor ?? Color.white;

        [SerializeField]
        private Color? normalColor;
    }

С подавлением:

    [SerializeField]
#pragma warning restore IDE0044, CS0414
    private bool flashCustomColor = false;
#pragma warning restore IDE0044, CS0414

    [SerializeField, OneLine.OneLine, ShowIf("flashCustomColor")]
    private FlashingColors flashingColors;

    [System.Serializable]
    private struct FlashingColors
    {
        public Color GetHurtColor() => hurtColor ?? Color.red;

        [SerializeField]
#pragma warning disable CS0649, IDE0044
        private Color? hurtColor;
#pragma warning restore CS0649, IDE0044

        public Color GetNormalColor() => normalColor ?? Color.white;

        [SerializeField]
#pragma warning disable CS0649, IDE0044
        private Color? normalColor;
#pragma warning restore CS0649, IDE0044
    }

Я пытаюсь включить этот пункт контекстного меню, но, похоже, он не сразу доступен для предупрежденияCS0649.Это то, что в настоящее время отображается: enter image description here Но на других ошибках я могу подавить это, как показано ниже: enter image description here РЕДАКТИРОВАТЬ: я знаю, что я могу установитьполе до = null; в классах, но структуры не могут принимать инициализаторы по умолчанию.Я обновил изображения, чтобы отразить это.

...