«SuppressMessage» для всего пространства имен

Я использую символы подчеркивания для своих тестовых методов для лучшей читабельности, и я хочу подавить ошибки/предупреждения FxCop для всего тестового пространства имен.

Как я могу этого добиться? Я играл с GlobalSuppressions.cs, но ничего не получилось:

[module: System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
    Scope = "namespace", Target = "Company.Product.Tests")]

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
    Scope = "namespace", Target = "Company.Product.Tests")]

person timmkrause    schedule 06.07.2012    source источник
comment
+1 То же самое... Я пробовал подобное в файле AssemblyInfo.cs, и это тоже не сработало. Возможно, CA1707 не может быть нацелен на всю библиотеку или пространство имен, а только на сам элемент.   -  person harlam357    schedule 04.08.2012
comment
Можно ли применить его ко всему раствору?   -  person Deivydas Voroneckis    schedule 10.12.2020


Ответы (6)


Подавление предупреждения анализа кода для пространства имен и всех его дочерних символов возможно, начиная с Visual Studio 2019:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
    Justification = "Test methods require underscores for readability."
    Scope = "namespaceanddescendants", Target = "Company.Product.Tests")]

Область — цель, для которой подавляется предупреждение. Если цель не указана, она устанавливается на цель атрибута. Поддерживаемые области включают следующее:

  • ...

  • namespaceanddescendants — (новинка для Visual Studio 2019). Эта область подавляет предупреждения в пространстве имен и всех его дочерних символах. Значение namespaceanddescendants допустимо только для анализаторов Roslyn и игнорируется бинарным статическим анализом на основе FxCop.

Подавить предупреждения об анализе кода Атрибут #SuppressMessage @ MS Docs

person Leniaal    schedule 30.05.2019
comment
Обратите внимание, что вы должны добавить ~N: в качестве префикса к цели, чтобы избежать проблем с производительностью. Ссылка: docs.microsoft.com/en- us/dotnet/fundamentals/code-analysis/ Пример: [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage( Microsoft.Naming, CA1707:IdentifiersShouldNotContainUnderscores, Justification = Тестовые методы требуют подчеркивания для удобочитаемости. Scope = namespaceanddescendants, Target = ~N:Компания.Продукт.Тесты)] - person Sam; 01.03.2021

Для этого вы можете использовать область «модуль», которая поддерживается более старыми компиляторами, чем те, которые поддерживают более новую область «пространство имен и потомки». Объем модуля влияет на все в проекте и не требует целевой спецификации.

Пример использования:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores",
    Justification = "Test methods require underscores for readability."
    Scope = "module")]
person carlin.scott    schedule 10.01.2020
comment
Это работает, я пробовал, в пространстве имен и потомках. - person Vaibhav.Inspired; 18.04.2020
comment
На самом деле я добавил это в официальную документацию: docs.microsoft.com/en-us/visualstudio/code-quality/ - person carlin.scott; 21.04.2020

Мне удалось проигнорировать это конкретное предупреждение специально для тестовых проектов (я следую соглашению об именах, в котором они всегда заканчиваются на «Tests.cs»), используя файл .editorconfig, содержащий следующее правило:

[*Tests.cs]
dotnet_diagnostics.CA1707.severity = none

Подробнее о моем ответе здесь

person ccoutinho    schedule 08.04.2020

Да, это невозможно с FxCop ‹= 10.0.

Что вы можете сделать, так это отключить CA1707, используя пользовательский файл правил (возможно, только для ваших тестовых проектов).

person ulrichb    schedule 05.12.2012

Как уже было сказано, из коробки это невозможно. Имхо, так задумано, потому что подавлять надо делать единообразно.

Существует обходной путь, чтобы сделать это вручную через FXCop 10 с функциональностью Copy As > Module-level SuppressMessage.

Минусы: вам придется повторять это каждый раз при изменении пространства имен, но, как уже было сказано, глобальные подавления должны быть изолированы.

  1. Откройте свою сборку в FXCop 10 (System.Xml здесь) и запустите анализ
  2. Выберите свое пространство имен (здесь System.Xml)
  3. Выбрать все нарушенные правила
  4. Щелкните правой кнопкой мыши и Copy As > Module-level SupressMessage
  5. Затем вставьте его, например, в GlobalSuppressions.cs

Примечание. Это можно сделать на уровне сборки, пространства имен или типа.

SuppressMessage на уровне модуля

person JoeBilly    schedule 19.08.2013

Я думаю, что это невозможно, как уже сказал harlam357.

person timmkrause    schedule 13.09.2012
comment
В соответствии с этот комментарий с VS Dev16 предварительная версия 2. - person Jack Miller; 12.03.2019