Visual Studio multi-project templates rename names

2020-05-28 02:05发布

问题:

I've successfully created a multi-project solution template. What I would like to do, however, is to rename the beginning of each project with the name of the solution.

So my projects:

  • ProjectOne.A
  • ProjectTwo.B

Would be renamed to

  • SolutionName.A
  • SolutionName.B

where SolutionName is the name by the user when they created the project.

I've read the following articles:

  • http://msdn.microsoft.com/en-us/library/ms185308.aspx
  • http://msdn.microsoft.com/en-us/library/ms185311.aspx
  • http://msdn.microsoft.com/en-us/library/ms247063.aspx

but none seem to answer my specific situation.

回答1:

If your main .vstemplate (the solution's one) is like the example below, you can use variables defined in wizard's dictionary to rename project folders and .csproj to whatever names you want.

<?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>

Use similar changes to addition .vstemplates (the projects' .vstemplates) to rename the .csproj files.