Шаблоны нескольких проектов Visual Studio переименовывают пространства имен и имена проектов

Я успешно создал шаблон многопроектного решения. Однако я бы хотел переименовать начало каждого проекта с именем решения.

Итак, мои проекты:

  • ProjectOne.A
  • ProjectTwo.B

Будет переименован в

  • SolutionName.A
  • SolutionName.B

где SolutionName - имя пользователя при создании проекта.

Я прочитал следующие статьи:

но, похоже, никто не отвечает на мою конкретную ситуацию.


person Omar    schedule 15.03.2011    source источник
comment
@Adron - можешь выложить точную ссылку. Я не хочу искать нужную статью.   -  person Omar    schedule 22.03.2011
comment
Мне еще предстоит проверить то, что вы предложили, но я верю, что это работает, основываясь на комментарии Майлза.   -  person Omar    schedule 20.05.2011


Ответы (1)


Если ваш основной .vstemplate (один из решений) аналогичен приведенному ниже примеру, вы можете использовать переменные, определенные в словаре мастера, для переименования папок проекта и .csproj на любые имена, которые захотите.

<?xml version="1.0" encoding="utf-8"?>
<VSTemplate Version="2.0.0" Type="ProjectGroup"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>My Web Server Solution with DAL</Name>
        <Description>Creates Projects for Web Server DAL and adds them to a new or existing solution</Description>
        <Icon></Icon>
        <ProjectType>CSharp</ProjectType>
        <ProjectSubType>My</ProjectSubType>
        <DefaultName>WebServer</DefaultName>
        <NumberOfParentCategoriesToRollUp>2</NumberOfParentCategoriesToRollUp>
        <TemplateGroupID>My</TemplateGroupID>
        <TemplateID>My.Dal.Web.Template</TemplateID>
    </TemplateData>
    <TemplateContent>
        <ProjectCollection>
            <ProjectTemplateLink ProjectName="$ModelProjectName$">
                Children\Model\ProjectTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="$SharedModelContractsProjectName$">
                Children\SharedModelContracts\ProjectTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="$RepositoryInterfacesProjectName$">
                Children\RepositoryInterfaces\ProjectTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="$RepositoryImplementationProjectName$">
                Children\RepositoryImplementation\ProjectTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="$RepositoryExtensionsProjectName$">
                Children\RepositoryExtensions\ProjectTemplate.vstemplate
            </ProjectTemplateLink>
        </ProjectCollection>
    </TemplateContent>
    <WizardExtension>
        <Assembly>My.WebServerDalExtension.Wizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5c93c79b0feae916</Assembly>
        <FullClassName>My.WebServerDalExtension.Wizard.Controller</FullClassName>
    </WizardExtension>
</VSTemplate>

Используйте аналогичные изменения для добавления .vstemplates (.vstemplates проектов), чтобы переименовать файлы .csproj.

person Danny Varod    schedule 05.05.2011
comment
Некоторые из этих проектов ссылаются друг на друга, но заполнители $safeitemname$ и $safeprojectname$ не заменяются или заменяются неправильным значением. Есть идеи, как связать проекты вместе? - person Omar; 04.09.2011
comment
Да, прочтите все названия проектов в своем мастере. Определите в мастере переменные использования каждой ссылки на проект. См. Этот пример: vsix.codeplex.com - person Danny Varod; 04.09.2011
comment
Да, похоже, что добавление пользовательской переменной в раздел ссылок .csproj абсолютно ничего не дает. - person Dmitri Nesteruk; 20.09.2011
comment
Файл .vstemplate должен включать замену переменных для этого файла .csproj. - person Danny Varod; 20.09.2011
comment
как передать пользовательские параметры дочернему шаблону? - person Alex Gordon; 03.10.2018
comment
@AlexGordon Я реализовал это много лет назад, однако я помню, что это просто сработало. Сегодня я использую гораздо лучший подход, который не использует механизм шаблонов VS. - person Danny Varod; 04.10.2018
comment
@DannyVarod - это секретный подход, который вы используете, или это то, чем вы потенциально готовы публично поделиться здесь? - person Alex Gordon; 04.10.2018
comment
@AlexGordon Не засекречено, я могу объяснить, как это работает, и спросить о публикации кода. Обратной стороной шаблонных проектов является то, что их сложно поддерживать в актуальном состоянии. Вот почему я придумал новое решение, которое мы реализовали - используйте репозиторий рабочего кода, который компилируется с запускаемыми модульными и интеграционными тестами с общими именами, например. VAL_ROOT_VAL, VAL_DOMAIN_VAL, VAL_PROJECT_VAL. Затем используйте мастер для клонирования этого репозитория с заменами, чтобы создать новый репозиторий с конкретными необходимыми именами. Это решение значительно упрощает обновление, поскольку шаблон компилируется и содержит тесты. - person Danny Varod; 07.10.2018