„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 = Тестовите методи изискват долни черти за четливост. Обхват = namespaceanddescendants, Target = ~N:Компания.Продукт.Тестове)] - person Sam; 01.03.2021

Можете да използвате обхвата "module" за това, който се поддържа от по-стари компилатори от тези, които поддържат по-новия обхват "namespaceand descendants". Обхватът на модула засяга всичко в проекта и не изисква целева спецификация.

Примерна употреба:

[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 например

Забележка: това може да се направи на ниво асемблиране, пространство от имена или тип.

Съобщение за потискане на ниво модул

person JoeBilly    schedule 19.08.2013

Мисля, че не е възможно, както вече каза harlam357.

person timmkrause    schedule 13.09.2012