2013-07-31 64 views
4

所以我試圖建立一個多項目模板,當我設置它的文件夾結構出來不正確(不是如何微軟它創建項目時),它的東西了像軟件包文件夾和參考文獻文件夾。多項目模板文件夾結構不正確

這是當前結構:

Solution Folder 
-Solution File 
-Folder (Solution Name) 
--Packages 
--References 
--Project1 Folder 
--Project2 Folder 

我希望它有一個.NET自動執行相同的結構:

Solution Folder 
-Solution File 
-References Folder 
-Packages Folder 
-Project1 Folder 
-Project2 Folder 

這裏是我的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> 

回答

1

我不認爲可以使用vstemplates在父解決方案文件夾中添加解決方案文件夾。

但是,您可以嘗試添加一個嚮導到您的模板,使您可以在用戶從模板創建項目時運行自定義代碼。

按照說明herehere,但基本上你做這樣的事情:

  1. 在ClassLibrary項目落實IWizard interface和使用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) 
    } 
    
  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> 
    

然後,當您使用新模板創建項目時,代碼應該正在運行。

希望這可以幫助你以某種方式。