Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Как указать пространство имен по-умолчанию в шаблоне проекта Visual Studio?

#c_sharp #visual_studio #шаблоны


Имеется проект с пространством имен по умолчанию Root.ProjectName. Впоследствии проект
экспортируется как шаблон с предварительным переименованием пространства имен ProjectName
во всех файлах проекта в $safeprojectname$. Проблема в том, что после создания проекта,
основанного на этом шаблоне, выкидывается исключение MissingManifestResourceException,
а пространство имен по умолчанию меняется с Root.ProjectName на ProjectName, где ProjectName
- это указанное пользователем имя проекта при создании.

Конечно, после ручного переименования все работает, но возникает вопрос: как принудительно
указать в шаблоне, что пространство имен по умолчанию состоит не только из имени проекта?
    


Ответы

Ответ 1



Когда Вы создаёте (экспортируете) шаблон, имя, которое пользователь введёт при создании проекта с использованием Вашего шаблона подставляется вместо переменной $safeprojectname$ во всех файлах проекта, в соответствии с содержимым файла TemplateName.csproj (где TemplateName это имя Вашего шаблона). Вот часть конфигурационного файла: Debug AnyCPU {$guid1$} Library Properties $safeprojectname$ $safeprojectname$ v4.5.2 512 Обратите внимание на содержимое тегов и . Если внутри вашего проекта будут вложенные директории, например, если корневое пространство имён шаблона - Root, а пространство имён внутри шаблона - Foo, соответственно, у Вас имеется класс с именем Root.Foo.SomeClass, то при создании проекта по шаблону, если проект будет назван пользователем MyRootSampleProject, то полное квалифицированное имя класса SomeClass - MyRootSampleProject.Foo.SomeClass, в результате никаких исключений не будет и всё будет компилироваться корректно, ведь это вполне ожидаемое поведение, поскольку создание шаблона предполагает переименование КОРНЕВОГО пространства имён проекта, а за формирование этого имени отвечает сам пользователь, использующий Ваш шаблон. Если же Вы, как пользователь хотите, чтобы перед всеми именами классов в созданном по шаблону проекте был какой-либо префикс, то нужно ввести вместо, скажем, имени MyRootSampleProject что-то вроде SolutionPrefix.MyRootSampleProject. Принудительно указать префикс в шаблоне не представляется возможным, да и трудно представить ситуацию, в которой это действительно будет нужно.

Ответ 2



При создании шаблона проекта, как правило, пространство имен в файлах переименовываются на $safeprojectname$. Но не всё можно заменить непосредственно в IDE. Если используется составное пространство имен (например: Root.ProjectName), то после экспорта шаблона в файле ProjectName.csproj необходимо вручную переименовывать параметр /Project/PropertyGroup/RootNamespace (например на Root.$safeprojectname$). В этом же файле можно переименовать параметры /Project/PropertyGroup/AssemblyName и /Project/PropertyGroup/DocumentationFile. Полный список поддерживаемых параметров шаблона можно посмотреть здесь.

Комментариев нет:

Отправить комментарий