建立多重專案範本

多專案範本可充當兩個或多個 Visual Studio 專案的容器。 當您根據多專案範本建立專案時,範本中的每個專案都會新增至方案。

注意

本文所討論的範本是您在 Visual Studio 中建立專案時所使用的範本,而不是 dotnet new 建立的範本。

多專案範本有兩個或更多的專案範本,以及一個 ProjectGroup 類型的根範本。

多專案範本的行為與單一專案範本不同。 它們具有下列獨特的特性:

  • 當範本用於建立新專案時,多專案範本中的個別專案不能指派名稱。 相反地,在 vstemplate 檔案的 ProjectTemplateLink 項目上使用 ProjectName 屬性,指定每個專案的名稱。

  • 多專案範本可以包含不同語言的專案,但整個範本本身只能放在一個類別中。 在 vstemplate 檔案的 ProjectType 項目中指定範本類別。

多專案範本必須包含下列項目,且壓縮成 .zip 檔案:

  • 整個多專案範本的根 vstemplate 檔案。 此根 vstemplate 檔案包含您建立新專案所在之對話方塊中顯示的中繼資料。 也會指定何處可找到範本中專案的 vstemplate 檔案。 這個檔案必須位於 .zip 檔案的根目錄。

  • 包含完整專案範本所需之檔案的兩個或多個資料夾。 資料夾包括專案的所有程式碼檔案,以及專案的 vstemplate 檔案。

例如,有兩個專案的多專案範本 .zip 檔,可能有下列檔案和目錄:

  • MultiProjectTemplate.vstemplate
  • \Project1\MyTemplate.vstemplate
  • \Project1\Project1.vbproj
  • \Project1\Class.vb
  • \Project2\MyTemplate.vstemplate
  • \Project2\Project2.vbproj
  • \Project2\Class.vb

多專案範本的根 vstemplate 檔案與單一專案範本在下列幾點有所不同:

  • VSTemplate 項目的 Type 屬性具有 ProjectGroup 值,而非 Project。 例如:

    <VSTemplate Version="2.0.0" Type="ProjectGroup"
        xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    
  • TemplateContent 項目包含 ProjectCollection 項目,它具有一或多個 ProjectTemplateLink 項目可定義所包含專案的 vstemplate 檔案路徑。 例如:

    <TemplateContent>
        <ProjectCollection>
            <ProjectTemplateLink>
                Project1\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink>
                Project2\MyTemplate.vstemplate
            </ProjectTemplateLink>
        </ProjectCollection>
    </TemplateContent>
    

提示

如果您只希望多專案範本顯示在新的 [專案] 對話方塊中而不是它包含的個別專案中,請將內部範本標記為 [隱藏]。 例如:

<VSTemplate Type="Project" ... >
    <TemplateData>
        ...
        <Hidden>true</Hidden>
    </TemplateData>
    ...
</VSTemplate>

從現有的解決方案中建立多專案範本

  1. 建立解決方案並新增兩個或多個專案。

  2. 自訂專案,直到它們可以匯出成範本為止。

    提示

    如果您使用範本參數且您想要從父代範本參考變數,請在參數名稱加上前置詞 ext_。 例如: $ext_safeprojectname$ 。 此外,請將 ProjectTemplateLink 元素的 CopyParameters 屬性設定為 true

    <ProjectTemplateLink ProjectName="MyProject" CopyParameters="true">...</ProjectTemplateLink>
    
  3. 選擇 [專案] 功能表上的 [匯出範本]

    [匯出範本精靈] 隨即開啟。

  4. 在 [選擇範本類型] 頁面上,選取 [專案範本]。 選取其中一個您想要匯出至範本的專案,然後選擇 [下一步]。 (對解決方案中的每個專案重複這些步驟)。

  5. 在 [選取範本選項] 頁面上,輸入範本的名稱和選擇性描述、圖示和預覽影像。 選擇 [完成]

    專案會匯出為 .zip 檔案,放在指定的輸出位置。

    注意

    每個專案必須分別匯出成範本,所以請在解決方案中為每個專案重複上述的這些步驟。

  6. 建立範本目錄,每個專案都有子目錄。

  7. 將每個專案的 .zip 檔案內容解壓縮至您建立的對應子目錄。

  8. 在基底目錄中,建立檔案副檔名為 .vstemplate 的 XML 檔案。 此檔案包含多專案範本的中繼資料。 請參閱接下來的檔案結構範例。 請務必指定每個專案的 vstemplate 檔案相對路徑。

  9. 選取基底目錄中的所有檔案,然後從滑鼠右鍵操作功能表或操作功能表中選擇 [傳送至]>[壓縮的 (zipped) 資料夾]

    檔案和資料夾即會壓縮成 .zip 檔案。

  10. .zip 檔案複製到使用者專案範本目錄中。 此目錄預設為 %USERPROFILE%\Documents\Visual Studio <版本>\Templates\ProjectTemplates

  11. 在 Visual Studio,選擇 [檔案]>[新增]>[專案] ,確認範本是否出現。

雙專案範例

這個範例將示範基本的多專案根 vstemplate 檔案。 在本範例中,範本有兩個專案:My Windows ApplicationMy Class LibraryProjectTemplateLink 項目上的 ProjectName 屬性會指定要提供給專案的名稱。

提示

如果未指定 ProjectName 屬性,則請使用 vstemplate 檔案的名稱作為專案名稱。

<VSTemplate Version="2.0.0" Type="ProjectGroup"
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>Multi-Project Template Sample</Name>
        <Description>An example of a multi-project template</Description>
        <Icon>Icon.ico</Icon>
        <ProjectType>VisualBasic</ProjectType>
    </TemplateData>
    <TemplateContent>
        <ProjectCollection>
            <ProjectTemplateLink ProjectName="My Windows Application">
                WindowsApp\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="My Class Library">
                ClassLib\MyTemplate.vstemplate
            </ProjectTemplateLink>
        </ProjectCollection>
    </TemplateContent>
</VSTemplate>

具有解決方案資料夾的範例

本範例使用 SolutionFolder 項目將專案分割為兩個群組:Math ClassesGraphics Classes。 範本有四個專案,每個解決方案資料夾各包含兩個專案。

<VSTemplate Version="2.0.0" Type="ProjectGroup"
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>Multi-Project Template Sample</Name>
        <Description>An example of a multi-project template</Description>
        <Icon>Icon.ico</Icon>
        <ProjectType>VisualBasic</ProjectType>
    </TemplateData>
    <TemplateContent>
        <ProjectCollection>
            <SolutionFolder Name="Math Classes">
                <ProjectTemplateLink ProjectName="MathClassLib1">
                    MathClassLib1\MyTemplate.vstemplate
                </ProjectTemplateLink>
                <ProjectTemplateLink ProjectName="MathClassLib2">
                    MathClassLib2\MyTemplate.vstemplate
                </ProjectTemplateLink>
            </SolutionFolder>
            <SolutionFolder Name="Graphics Classes">
                <ProjectTemplateLink ProjectName="GraphicsClassLib1">
                    GraphicsClassLib1\MyTemplate.vstemplate
                </ProjectTemplateLink>
                <ProjectTemplateLink ProjectName="GraphicsClassLib2">
                    GraphicsClassLib2\MyTemplate.vstemplate
                </ProjectTemplateLink>
            </SolutionFolder>
        </ProjectCollection>
    </TemplateContent>
</VSTemplate>

項目參考的範例

此範例示範如何將專案參考新增至多項目範本,而且基本上是多重專案範例的延伸項目。

在此範例中,方案包含兩個專案 MultiProject.ClientMultiProject.Shared。 專案 MultiProject.Client 會參考 MultiProject.Shared

資料夾結構如下所示:

  • MultiProjectTemplate.vstemplate
  • \MultiProject.Client\MultiProject.Client.csproj
  • \MultiProject.Client\MyTemplate.vstemplate
  • \MultiProject.Shared\MultiProject.Shared.csproj
  • \MultiProject.Shared\MyTemplate.vstemplate

使用範本時,MultiProject 組件會取代為使用者輸入的專案名稱。

MultiProjectTemplate.vstemplate 看起來像下面這樣。 請注意,ProjectTemplateLink 的屬性 CopyParameters 設定為 true,且 ProjectName 屬性使用範本變數 $safeprojectname$

<VSTemplate Version="2.0.0" Type="ProjectGroup"
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
...
<TemplateContent>
    <ProjectCollection>
        <ProjectTemplateLink ProjectName="$safeprojectname$.Client" CopyParameters="true">
            MultiProject.Client\MyTemplate.vstemplate
        </ProjectTemplateLink>
        <ProjectTemplateLink ProjectName="$safeprojectname$.Shared" CopyParameters="true">
            MultiProject.Shared\MyTemplate.vstemplate
        </ProjectTemplateLink>
    </ProjectCollection>
</TemplateContent>
</VSTemplate>

MultiProject.Client\MyTemplate.vstemplate 看起來可能如下所示。 請注意,專案 標籤的屬性 ReplaceParameters 設定為 true

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
	...
	<TemplateContent>
		<Project TargetFileName="MultiProject.Client.csproj" File="MultiProject.Client.csproj" ReplaceParameters="true">
            ...
		</Project>
	</TemplateContent>
</VSTemplate>

MultiProject.Client\MultiProject.Client.csproj 看起來可能如下所示。 請注意,ProjectReferenceInclude 屬性使用範本變數 $ext_safeprojectname$

<Project>
    ...
	<ItemGroup>
	  <ProjectReference Include="..\$ext_safeprojectname$.Shared\$ext_safeprojectname$.Shared.csproj" />
	</ItemGroup>
</Project>