Добавление пользовательского формата в параметры шаблона Visual Studio Project - PullRequest
4 голосов
/ 04 ноября 2011

Я определил шаблон Visual Studio с именем classDB.cs.Мне бы хотелось, чтобы имя по умолчанию для класса отображалось как [имя_проекта] DB.cs, где [имя_проекта] - это имя текущего проекта (как указано в диалоговом окне "Создать проект").Есть ли способ добиться этого?Я попытался установить имя класса $safeprojectname$DB.cs, но это не сработало.

ОБНОВЛЕНИЕ

Я изменил шаблон своего проекта, но выдает эту ошибку, когда онсоздание проекта

enter image description here

вот шаблон класса

namespace $safeprojectname$.Models
{
    public class $safeprojectname$DB : DbContext
    {

    }
}

the class in the project

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

Я боролся с подобной ошибкой в ​​течение нескольких дней, и я наконец понял это.Visual Studio экранирует $ в файле .csproj.Таким образом, у вас будет узел, который выглядит следующим образом:

<Compile Include="Models\%24safeprojectname%24DB.cs" />

Откройте файл .csproj в текстовом редакторе и измените его на:

<Compile Include="Models\$safeprojectname$DB.cs" />

И сохраните файл.Ваш проект перезагрузится, но он не будет пытаться избежать имени файла снова!Экспортируйте свой шаблон, и вы должны обнаружить, что параметр теперь заменяется.

2 голосов
/ 04 ноября 2011

Попробуйте шаблон, подобный этому:

using System;
//...

namespace $rootnamespace$ {
    class $safeitemname$DB {
    }
}

Работает для меня.

Убедитесь, что вы обновили правильный шаблон (должен быть расположен под C:\Users\[user]\Documents\Visual Studio 2010\Templates\ItemTemplates в Windows 7) и перезапустите VisualStudio.


EDIT

Приведенный выше код предназначен для шаблона элемента, но он не должен отличаться от шаблона проекта.Согласно MSDN, параметры $safeitemname$ и $safeprojectname$ ведут себя одинаково:

safeitemname
Имя, предоставленное пользователем в диалоговом окне Добавить новый элемент,со всеми небезопасными символами и пробелами.

имя_проекта
Имя, указанное пользователем в диалоговом окне «Новый проект», со всеми небезопасными символами и пробелами.

0 голосов
/ 27 января 2016

Для случая, когда это кому-то нужно:

Я пытался добавить интерфейс к классу и не знал, как добиться, чтобы имя интерфейса состояло из имени класса, подобного этому I + $fileinputname$.


В *.vstemplate файле просто используйте I$fileinputname$.cs для TargetFileName интерфейса:

<TemplateContent>
    <ProjectItem TargetFileName="$fileinputname$.cs" ReplaceParameters="true">SomeClass.cs</ProjectItem>
    <ProjectItem TargetFileName="I$fileinputname$.cs" ReplaceParameters="true">ISomeClass.cs</ProjectItem>
</TemplateContent>

В файле ISomeClass.cs снова используйте I$fileinputname$ для имени интерфейса:

namespace $rootnamespace$
{
    public interface I$fileinputname$
    {
    }
}

Важно:

Установите для действия по сборке файлов SomeClass.cs и ISomeClass.cs значение None, поскольку данный проект предназначен для создания файла .zip, а не файла .dll или .exe, файлы кода не компилируются и не рассматриваются как код целевыми объектами сборки ( Файл .vstemplate имеет действие сборки VSTemplate. ).


В результате, когда SomeClass.cs добавляется как Item template, добавляется соответствующий интерфейс ISomeClass.cs.

enter image description here

...