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