Использование директив, пространства имен и ссылки на сборку - все перемешано с StyleCop! - PullRequest
6 голосов
/ 18 июня 2010

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

Все используемые директивы должны быть помещены внутриПространство имен.

Моя проблема в том, что я использую директивы, ссылку на сборку (для удаления поддельного файла) и пространство имен для жонглирования в одном из моих классов тестирования:

using System;
using System.IO;
using Microsoft.Moles.Framework;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[assembly: MoledType(typeof(System.IO.File))]

namespace MyNamespace
{
//Some Code
}

Вышеприведенное позволяет нормально выполнять тесты, но StyleCop жалуется на то, что директивы using не находятся внутри пространства имен.

Если вставить значения внутри пространства имен, возникает ошибка, что «MoledType» не распознается.

Помещение как использования, так и ссылки на сборку в пространство имен приводит к ошибке

'Assembly' - недопустимое расположение атрибута для этого объявления.Допустимые местоположения атрибута для этого объявления - тип.Все атрибуты в этом блоке будут игнорироваться.

Кажется, я попробовал все макеты, которые могу, но безрезультатно - либо решение не будет построено, либо не будет работать насмешка, либо StyleCop жалуется!

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

Ответы [ 3 ]

11 голосов
/ 18 июня 2010

Решено через две минуты!

Мне просто нужно было указать полный путь к «MoledType» в ссылке на сборку - то есть я мог бы оставить его вне пространства имен с помощью директив using внутри так:

[assembly: Microsoft.Moles.Framework.MoledType(typeof(System.IO.File))]
namespace MyNamespace
{
using System;
using System.IO;
using Microsoft.Moles.Framework;
using Microsoft.VisualStudio.TestTools.UnitTesting;

// Some Code...
}

Надеюсь, кто-нибудь найдет это полезным!

6 голосов
/ 19 июня 2010

Типичным шаблоном будет размещение всех атрибутов уровня сборки в файле AssemblyInfo.cs. Обычно в этом файле вообще нет элементов пространства имен, и все атрибуты сборки определяются с использованием полных имен.

1 голос
/ 19 мая 2014

Согласен с Джейсоном, вы должны вместо этого поместить его в AssemblyInfo.cs (Project -> Properties).

Но!Будьте осторожны с тем, что вы положили в файл AssemblyInfo.cs.Скажем, вы хотите использовать:

[assembly: InternalsVisibleTo("ClassA")]

Если вы поместите это в AssemblyInfo.cs, ВСЕ внутренние классы проекта будут видны для ClassA.Это не всегда нужно.

...