Мне нравится придерживаться правил форматирования 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 жалуется на директивы использования, не являющиеся в пространстве имен.
Помещение использований в пространстве имен дает ошибку, что "MoledType" не распознан.
Помещение и использования и ссылка на сборку в пространстве имен дает ошибку
'блок' не является допустимым местоположением атрибута для этого объявления. Допустимые местоположения атрибута для этого объявления являются 'типом'. Все атрибуты в этом блоке будут проигнорированы.
Кажется, что я попробовал каждое расположение, я могу, но напрасно - или решение не создаст, насмешка не будет работать или StyleCop, жалуется!
Кто-либо знает способ изложить их так, чтобы все было счастливо? Или я оказывающийся перед необходимостью игнорировать StyleCop, предупреждающий в этом случае?
Решено через две минуты!
Мне просто нужно было поместить полный путь к "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...
}
Надеюсь, кому-нибудь это пригодится!
Обычно все атрибуты уровня сборки помещаются в файл AssemblyInfo.cs. Обычно этот файл вообще не имеет никакого элемента пространства имен, и все атрибуты сборки определены с использованием полностью определенных имен.