Я использую инструменты StyleCop и FxCop для улучшения моего кода, но я пришел к месту, где есть два правила: один в StyleCop и один в FxCop, которые исключают друг друга. Если я исправлю свой код для соответствия правилу с StyleCop, то проверка FxCop завершится неудачно и наоборот.Правила StyleCop и FxCop исключают друг друга
Первое правило - SA1200 от StyleCop, в котором говорится, что все используемые директивы должны быть помещены внутри пространства имен.
Все используемые директивы должны быть размещены внутри пространства имен.
Так что я сделал что-то вроде этого
namespace MyNamespace
{
using System;
...
}
Это было нормально для StyleCop, не больше предупреждений. Теперь я бегу проверки FxCop, и он говорит мне, что CA1014 нарушается:
Марка «MyApp.dll» с CLSCompliant (правда), так как он предоставляет внешне видимые типы.
Чтобы решить эту проблему, я должен сделать что-то вроде этого:
[ClsCompliant(true)]
namespace MyNamespace
{
...
}
, но теперь я не могу построить мой проект, потому что ClsCompliant
атрибут не распознается (потому что это из System
имен, которые я включаю внутри MyNamespace
) , Поэтому, если я переведу директиву using System;
за пределами объявления MyNamespace
. Это заставит мой код скомпилировать, но снова он нарушит правило из StyleCop.
Есть ли способ решить эту проблему, кроме как отключить одно из правил в StyleCop или FxCop? И если это невозможно, какие из правил я должен отключить? Что менее важно?
Я думаю, что сборка должна быть маркирована CLSCompliant, как указано maciejkow, вместо того, чтобы маркировать совместимое пространство имен. –