多项目模板文件夹结构不正确

And*_*ris 5 .net asp.net templates visual-studio-2012

所以我正在尝试构建一个多项目模板,当我设置它时,文件夹结构出现错误(不是微软在创建项目时是如何做的)并且它把诸如Packages文件夹和References文件夹之类的东西弄乱了。

这是当前的结构:

Solution Folder
-Solution File
-Folder (Solution Name)
 --Packages
 --References
 --Project1 Folder
 --Project2 Folder
Run Code Online (Sandbox Code Playgroud)

我希望它具有 .NET 自动执行的相同结构:

Solution Folder
-Solution File
-References Folder
-Packages Folder
-Project1 Folder
-Project2 Folder
Run Code Online (Sandbox Code Playgroud)

这是我的 vstemplate:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
  <TemplateData>
    <Name>ASP Solution Template</Name>
    <Description>This is the Solution Template for ASP Applications</Description>
    <Icon>__TemplateIcon.ico</Icon>
    <ProjectType>CSharp</ProjectType>
  </TemplateData>
  <TemplateContent BuildOnLoad="true">
    <ProjectCollection>
      <SolutionFolder Name="References">
      </SolutionFolder>
      <SolutionFolder Name="packages">
      </SolutionFolder>
      <ProjectTemplateLink ProjectName="$safeprojectname$">
        ASPTemplate\MyTemplate.vstemplate
      </ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$safeprojectname$.ClassLibrary">
        ClassLibrary\MyTemplate.vstemplate
      </ProjectTemplateLink>
    </ProjectCollection>
  </TemplateContent>
</VSTemplate>
Run Code Online (Sandbox Code Playgroud)

Mar*_*num 1

我认为不可能使用 vstemplates 在父解决方案文件夹中添加解决方案文件夹。

但是,您可以尝试向模板添加一个向导,使您能够在用户从模板创建项目时运行自定义代码。

请按照此处此处的说明进行操作,但基本上您会执行以下操作:

  1. 在 ClassLibrary 项目中实现IWizard 接口并使用EnvDTE80创建文件夹:

    public class MyWizard : IWizard
    {
        public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
        {
            // Pseudo-code
            var dte = (DTE2)automationObject;
            var solution = (Solution2)dte.Solution;
    
            solution.AddSolutionFolder("References");
        }
    
        // Default implementations of IWizard here (return true's and do nothing's)
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 修改您的 vstemplate 以使用向导:

    <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
      <TemplateData />
      <TemplateContent BuildOnLoad="true" /> <!-- Remove the SolutionFolder elements -->
    
      <WizardExtension>
        <Assembly>CustomWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=fa3902f409bb6a3b</Assembly>
        <FullClassName>CustomWizard.MyWizard</FullClassName>
      </WizardExtension>
    
    </VSTemplate>
    
    Run Code Online (Sandbox Code Playgroud)

然后,当您使用新模板创建项目时,代码应该正在运行。

希望这对您有所帮助。