共用方式為


逐步解說: 第 1-建立基本的專案系統

Visual Studio,在專案的開發人員用來組織原始程式碼檔,並出現在其他資產的容器方案總管] 中。 專案可讓您組織、 建置、 偵錯和部署原始程式碼和建立 Web 服務、 資料庫和其他資源的參考。

一般而言,專案會指定專案檔,比方說,視覺 C# 專案的.csproj 檔的內容。 您可以建立自己的專案型別具有自己的專案檔案的副檔名。 如需有關專案類型的詳細資訊,請參閱專案類型

本逐步解說會教導如何建立具有專案檔案名稱副檔名.myproj 的專案型別。 若要完成逐步解說,您不必建立您自己的語言,因為逐步解說中採用從現有的視覺 C# 專案系統。

注意事項注意事項

完整的語言專案系統端對端範例中,請參閱 IronPython 範例深度剖析,在Visual Studio 的擴充性範例

本逐步解說會教導如何完成這些工作:

  • 建立基本專案類型。

  • 建立基本的專案範本。

  • 登錄 Visual Studio 的專案範本。

  • 建立專案的執行個體,藉由開啟新的專案 對話方塊,然後使用 [您的範本。

  • 建立專案的工廠,專案系統。

  • 建立的專案系統的 [專案] 節點。

  • 新增自訂專案系統圖示。

  • 實作基本的範本參數替換。

注意事項注意事項

在這個逐步解說的步驟是以 C# 專案為基礎。不過,除了的副檔名和程式碼的詳細資訊,您可以使用相同的步驟 Visual Basic 專案。

必要條件

若要完成這個逐步解說中,您必須安裝Visual Studio 2010 SDK。

注意事項注意事項

如需有關 Visual Studio 的 SDK 的詳細資訊,請參閱擴充 Visual Studio 的概觀。若要了解如何下載 Visual Studio 的 SDK,請參閱Visual Studio 擴充性開發人員中心 MSDN 網站上。

Visual Studio 的封裝專案範本的位置

Visual Studio 的封裝的專案範本,請參閱以下三個不同的位置,在新的專案對話方塊:

  1. 在 [Visual Basic 擴充性。 專案的預設語言是 Visual Basic。

  2. 在 [C# 擴充性。 專案的預設語言是 C#。

  3. 在 [其他專案的型別擴充性。 專案的預設語言是 C#,但 VB 和 c + + 可使用。

建立基本專案類型

專案類型,就像大部分的 Visual Studio 的擴充功能,是由 VSPackages 實作的。 如需有關 VSPackages 的詳細資訊,請參閱使用 VSPackages 自訂 Visual Studio 的逐步解說。 若要建立的專案類型,您必須先建立 VSPackage。

若要建立 VSPackage

  1. 建立一個名為 SimpleProject 的 VSPackage 專案。

  2. 選取程式語言 頁面上,選取 視覺 C#產生新的金鑰檔簽署組件

  3. 選取測試選項 頁面、 清除這兩個選項,然後再按一下 完成

    這個樣板會建立具有您所指定的設定在 VSPackage 專案。

建立基本的專案範本

現在,您可以修改這個基本的 VSPackage 來實作新的.myproj 專案型別。 若要建立的專案,根據 [.myproj] 專案類型,Visual Studio 必須知道哪些檔案、 資源及加入新專案的參考。 若要提供這項資訊,請將專案檔專案範本資料夾中。 然後,當使用者使用中的 [.myproj] 專案類型時,才新的專案對話方塊來建立專案,而是會複製到新的專案。

若要建立基本的專案範本

  1. 方案總管] 中,以滑鼠右鍵按一下 SimpleProject 專案節點,指到新增,,然後按一下 。 將資料夾命名為範本。

  2. 範本 資料夾中,加入名為 專案。

  3. 專案 資料夾中,加入名為 SimpleProject。

  4. 以滑鼠右鍵按一下 SimpleProject 資料夾中,指向 [ 新增,然後按一下 [ 新的項目。 加入圖示檔名為 SimpleProject.ico。 按一下 [ 新增圖示編輯器開啟。

  5. 製作特殊的圖示。 這個圖示會出現在新的專案稍後在逐步解說中的對話方塊。

    簡單專案圖示

  6. 儲存的圖示並關閉編輯器] 圖示。

  7. SimpleProject 資料夾中,加入類別 項目名稱為 Program.cs。 按一下 [ 新增 ,開啟程式碼編輯器。

  8. 使用下列幾行,以取代現有的程式碼。

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace $nameSpace$
    {
        public class $className$
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello VSX!!!");
                Console.ReadKey();
            }
        }
    }
    
注意事項注意事項

在 [專案] 範本中的檔案可能包含可以在將檔案複製到新的專案時以程式設計方式修改的範本參數。稍後在逐步解說中,您可以學習如何完成這項作業的範本參數,$ 和 $className$ 的 $ 命名空間。

  1. 將檔案儲存並關閉程式碼編輯器。

  2. 屬性 資料夾中,複製 AssemblyInfo.cs,然後再貼在 Projects\SimpleProject 資料夾。

  3. 屬性 ] 視窗中,設定 建置動作 到 AssemblyInfo.cs 的

  4. 方案總管] 中,以滑鼠右鍵按一下 SimpleProject 資料夾中,指向 新增,然後按一下 新項目。 加入 XML 檔名為 SimpleProject.myproj。 按一下 [ 新增 ,開啟 [XML 編輯器。

    注意事項注意事項

    所有的專案,這種類型的副檔名是.myproj。如果您想要變更它,您必須變更每個逐步解說中所描述的地方。

  5. 使用下列幾行,以取代現有的內容。

    <Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <SchemaVersion>2.0</SchemaVersion>
        <ProjectGuid>{99999999-9999-9999-9999-999999999999}</ProjectGuid>
        <OutputType>Exe</OutputType>
        <RootNamespace>MyRootNamespace</RootNamespace>
        <AssemblyName>MyAssemblyName</AssemblyName>
        <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
        <DebugSymbols>true</DebugSymbols>
        <OutputPath>bin\Debug\</OutputPath>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
        <DebugSymbols>false</DebugSymbols>
        <OutputPath>bin\Release\</OutputPath>
      </PropertyGroup>
      <ItemGroup>
        <Reference Include="mscorlib" />
        <Reference Include="System" />
        <Reference Include="System.Data" />
        <Reference Include="System.Xml" />
      </ItemGroup>
      <ItemGroup>
        <Compile Include="AssemblyInfo.cs">
          <SubType>Code</SubType>
        </Compile>
        <Compile Include="Program.cs">
          <SubType>Code</SubType>
        </Compile>
      </ItemGroup>
      <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    </Project>
    
  6. 將檔案儲存並關閉 [XML 編輯器] 中。

  7. 屬性 ] 視窗中,設定 建置動作 Program.cs、 SimpleProject.ico,以及 SimpleProject.myproj 到 內容,並設定其各別所屬 加入至 VSIX 屬性,以 ,則為 True

這個專案範本說明基本的視覺 C# 專案具有 [偵錯設定] 和 [發行] 組態。 專案包含兩個原始程式檔、 AssemblyInfo.cs 及 Program.cs,以及數個組件參考。 當從範本建立專案時,ProjectGuid 值就會自動取代新的 GUID。

方案總管] 中,展開 範本資料夾應該會出現,如下所示:

範本

    專案

        SimpleProject

            AssemblyInfo.cs

            Program.cs

            SimpleProject.ico

            SimpleProject.myproj

建立專案的骨架 Factory

您必須告訴 Visual Studio 的專案範本資料夾的位置。 若要這樣做,請將屬性加入 VSPackage 類別實作專案工廠,以便建置 VSPackage 時,將會寫入系統登錄檔的範本位置。 開始建立基本專案工廠所識別的專案工廠 GUID。 使用ProvideProjectFactoryAttribute專案工廠連 SimpleProjectPackage 類別的屬性。

若要建立的骷髏專案工廠

  1. 開啟 [程式碼編輯器中的 [Guids.cs]。

  2. 工具 ] 功能表中,按一下 建立 GUID

  3. 建立您的專案工廠的 GUID 或使用數位憑證,如下例所示。 GuidList 中加入 GUID。 GUID 必須是 Guid 表單和字串格式。 產生的程式碼應該類似下列的範例。

    static class GuidList
    {
        public const string guidSimpleProjectPkgString = 
            "96bf4c26-d94e-43bf-a56a-f8500b52bfad";
        public const string guidSimpleProjectCmdSetString = 
            "72c23e1d-f389-410a-b5f1-c938303f1391";
        public const string guidSimpleProjectFactoryString =  
            "471EC4BB-E47E-4229-A789-D1F5F83B52D4";
    
        public static readonly Guid guidSimpleProjectCmdSet = 
            new Guid(guidSimpleProjectCmdSetString);
        public static readonly Guid guidSimpleProjectFactory =  
            new Guid(guidSimpleProjectFactoryString);
    };
    
  4. 將檔案儲存並關閉編輯器。

  5. 方案總管] 中,以滑鼠右鍵按一下 SimpleProject 專案節點,指到新增,,然後按一下 新的項目。 新增類別 名為 SimpleProjectFactory.cs。 按一下 [ 新增 ,開啟程式碼編輯器。

  6. 將下列 using 陳述式,接著一個 using 陳述式。

    using System.Runtime.InteropServices;
    
  7. SimpleProjectFactory 類別中加入 Guid 屬性。 屬性的值是新的專案工廠 GUID。

    [Guid(GuidList.guidSimpleProjectFactoryString)]
    class SimpleProjectFactory
    
  8. 重建方案並驗證它建置無誤。

現在您可以註冊您的專案範本。

若要註冊的專案範本

  1. 開啟 [程式碼編輯器中的 [SimpleProjectPackage.cs]。

  2. 新增ProvideProjectFactoryAttribute SimpleProjectPackage 類別屬性,如下所示。

    [ProvideProjectFactory( 
        typeof(SimpleProjectFactory),  
        "Simple Project",  
        "Simple Project Files (*.myproj);*.myproj",  
        "myproj", "myproj",  
        @"Templates\Projects\SimpleProject",  
        LanguageVsTemplate = "SimpleProject")]
    [Guid(GuidList.guidSimpleProjectPkgString)]
    public sealed class SimpleProjectPackage : Package
    
  3. 重建方案並驗證它建置無誤。

    重新建置登錄專案範本。

ProvideProjectFactory 屬性的語法如下。

public ProvideProjectFactoryAttribute(    Type factoryType,    string name,     string displayProjectFileExtensionsResourceID,    string defaultProjectExtension,    string possibleProjectExtensions,    string projectTemplatesDirectory)

參數defaultProjectExtension和possibleProjectExtensions設定為 [專案檔案的副檔名 (.myproj)。 projectTemplatesDirectory參數設定為 [範本] 資料夾的相對路徑。 在建置期間此路徑會轉換成完整的建置和加至登錄專案系統登錄。

檢查範本註冊

在建置期間Visual Studio會建立一個稱為 SimpleProject.pkgdef,其中包含要使用範本所需的資訊檔案。 這是專案的 \bin\debug 資料夾中的隱藏的檔。 開啟檔案,以確認內容會像這樣:

[$RootKey$\InstalledProducts\SimpleProjectPackage]
@="#110"
"Package"="{f202a1d5-9bf7-424c-a261-d7d2ab364560}"
"PID"="1.0"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\Packages\{f202a1d5-9bf7-424c-a261-d7d2ab364560}]
@="Company.SimpleProject.SimpleProjectPackage, SimpleProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cf624da7ef057ca0"
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL"
"Class"="Company.SimpleProject.SimpleProjectPackage"
"CodeBase"="$PackageFolder$\SimpleProject.dll"
[$RootKey$\Menus]
"{f202a1d5-9bf7-424c-a261-d7d2ab364560}"=", Menus.ctmenu, 1"
[$RootKey$\Projects\{471ec4bb-e47e-4229-a789-d1f5f83b52d4}]
@="SimpleProjectFactory"
"DisplayName"="Simple Project"
"DisplayProjectFileExtensions"="Simple Project Files (*.myproj);*.myproj"
"Package"="{f202a1d5-9bf7-424c-a261-d7d2ab364560}"
"DefaultProjectExtension"="myproj"
"PossibleProjectExtensions"="myproj"
"ProjectTemplatesDir"="$PackageFolder$\Templates\Projects\SimpleProject"
"Language(VsTemplate)"="SimpleProject"
[$RootKey$\NewProjectTemplates\TemplateDirs\{f202a1d5-9bf7-424c-a261-d7d2ab364560}\/1]
@="Simple Project"
"SortPriority"=dword:00000064
"TemplatesDir"="$PackageFolder$\Templates\Projects\SimpleProject"

請注意在檔案中的 Guid 會不同。 其為您的專案符合在 Guids.cs 中的 Guid。

測試範本註冊

範本註冊動作可以讓 Visual Studio 的專案範本資料夾的位置,讓範本名稱] 和 [中的] 圖示,可以顯示 Visual Studio 新的專案對話方塊。

若要測試範本註冊

  1. 在 Visual Studio 中,按 F5 以啟動實驗性質的 Visual Studio 執行個體。

  2. 檔案 功能表上指向 新增,然後按一下 專案。在 新的專案對話方塊方塊中,選取 [SimpleProject] 專案類型。

    [SimpleProject] 圖示會出現在 Visual Studio 的已安裝的範本

  3. 關閉 Visual Studio 的實驗性的執行個體。

您現在可以證明註冊專案工廠。 不過,它還不能建立專案。 專案套件 」 和 「 專案工廠一起工作,以建立和初始化專案。

初始化專案工廠

若要實作專案套件 」 和 「 專案工廠之間的連線,請完成這些工作:

  • 加入的方案,將連結新增至原始程式碼檔案的Microsoft.VisualStudio.Package專案架構。 此架構是延伸的管理套件架構 」 (MPF)。 只以原始程式碼提供專案架構。

  • Microsoft.VisualStudio.Package.ProjectPackage 衍生 SimpleProjectPackage。

  • 建立SimpleProjectFactory並登錄它藉由使用 Visual Studio Microsoft.VisualStudio.Package.RegisterProjectFactory方法。

  • Microsoft.VisualStudio.Package.ProjectPackage 衍生 SimpleProjectPackage。

  • 傳遞至SimpleProjectFactory建構函式的參考, SimpleProjectPackage。 這個參考會快取,稍後再設定服務提供者的網站。 如需有關服務的詳細資訊,請參閱服務

初始化專案工廠

  1. 方案總管] 中,以滑鼠右鍵按一下 SimpleProject 節點,然後按一下 卸載專案

  2. 以滑鼠右鍵按一下 SimpleProject 節點,然後按一下 [ 編輯 SimpleProject.csproj

  3. 找出受管理的專案的原始程式檔,藉由遵循這個連結。 將這些檔案複製到本機資料夾命名,例如,C:\MyLocalFolder\Project

  4. 在 [XML 編輯器] 中,加入下列ProjectBasePath後的項目RegisterWithCodebase項目。 不會中斷行,其中包含ProjectBasePath項目。

    <RegisterWithCodebase>true</RegisterWithCodebase>
    <ProjectBasePath>C:\MyLocalFolder\Project</ProjectBasePath>
    
  5. 將下列加入Import後將現有的項目Import項目。

    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets" />
    <Import Project="$(ProjectBasePath)\ProjectBase.Files" />
    
  6. 儲存專案檔,並關閉編輯器。

  7. 以滑鼠右鍵按一下 SimpleProject 節點,然後再按一下重新載入專案方案總管] 中 應該現在會顯示 ProjectBase 資料夾。

  8. 以滑鼠右鍵按一下參考節點,然後新增下列。NET 的參考。

    • EnvDTE (Visual Studio 的安裝路徑\Common7\IDE\PublicAssemblies\EnvDTE.dll)

    • Microsoft.VisualStudio.Designer.Interfaces

  9. 在 SimpleProjectPackage.cs 檔案中加入下列using陳述式之後的using陳述式。

    using Microsoft.VisualStudio.Package;
    
  10. 衍生SimpleProjectPackage類別從Microsoft.VisualStudio.Package.ProjectPackage

    public sealed class SimpleProjectPackage : ProjectPackage
    
  11. 新增下行到SimpleProjectPackage.Initialize方法,只是在base.Initialize。

    base.Initialize(); 
    this.RegisterProjectFactory(new SimpleProjectFactory(this));
    
  12. 在 SimpleProjectFactory.cs 中,加入下列using陳述式之後的using陳述式。

    using Microsoft.VisualStudio.Package;
    
  13. 衍生SimpleProjectFactory類別從ProjectFactory

    class SimpleProjectFactory : ProjectFactory
    
  14. 加入下列的虛擬方法,以SimpleProjectFactory類別。 您將在稍後的章節中實作這個方法。

    protected override ProjectNode CreateProject() 
    { 
        return null; 
    }
    
  15. 加入下列的欄位和建構函式, SimpleProjectFactory類別。 這SimpleProjectPackage的參考會快取中私用欄位,這樣就可以使用設定的服務提供者的網站。

    private SimpleProjectPackage package; 
    
    public SimpleProjectFactory(SimpleProjectPackage package) 
        : base(package) 
    { 
        this.package = package; 
    }
    
  16. 重建方案並驗證它建置無誤。

測試專案的工廠實作

測試是否在呼叫您的專案工廠實作建構函式。

若要測試專案的工廠實作

  1. 在 SimpleProjectFactory.cs 檔案中,在下面這一行設定中斷點SimpleProjectFactory建構函式。

    this.package = package;
    
  2. 按 F5 以啟動實驗性質的 Visual Studio 執行個體。

  3. 在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。

  4. 新的專案 對話方塊中,選取 SimpleProject 專案類型,然後按一下 [ 確定。在中斷點停止執行。

  5. 清除中斷點。

  6. 請按 SHIFT + F5 鍵以停止偵錯。

擴充專案節點類別

現在您可以實作SimpleProjectNode類別是衍生自ProjectNode類別。 ProjectNode基底類別會處理建立專案的下列工作:

  • 將專案範本檔案,而 SimpleProject.myproj,複製到新的專案資料夾中。 根據隨即匯入的名稱來重新命名複本新的專案對話方塊。 ProjectGuid屬性值已由新的 GUID。

  • 周遊 MSBuild 的項目專案樣板檔 SimpleProject.myproj,而查看是否有Compile項目。 每個Compile目標檔案,將檔案複製到新的專案資料夾。

在衍生SimpleProjectNode類別會處理這些工作:

  • 可讓專案和檔案中的節點圖示方案總管] 中來建立或選取。

  • 可以指定其他的專案範本參數替換。

若要擴充的專案節點類別

  1. 以滑鼠右鍵按一下 SimpleProject 專案節點,並指向新增,然後按一下 [ 新項目。 新增類別 名為 SimpleProjectNode.cs。 按一下 [ 新增 ,開啟程式碼編輯器。

  2. 將現有的程式碼更換成下列程式碼。

    using System;
    using System.Collections.Generic;
    using Microsoft.VisualStudio.Package;
    
    namespace Company.SimpleProject
    {
        public class SimpleProjectNode : ProjectNode
        {
            private SimpleProjectPackage package;
    
            public SimpleProjectNode(SimpleProjectPackage package)
            {
                this.package = package;
            }
            public override Guid ProjectGuid
            {
                get { return GuidList.guidSimpleProjectFactory; }
            }
            public override string ProjectType
            {
                get { return "SimpleProjectType"; }
            }
    
            public override void AddFileFromTemplate(
                string source, string target)
            {
                this.FileTemplateProcessor.UntokenFile(source, target);
                this.FileTemplateProcessor.Reset();
            }
        }
    }
    

這SimpleProjectNode類別實作具有這些覆寫的方法:

  • ProjectGuid會傳回專案工廠 GUID。

  • ProjectType傳回的專案類型的當地語系化的名稱。

  • AddFileFromTemplate其中將選取的檔案從 [範本] 資料夾複製到目的專案。 在後面的章節中進一步實作這個方法。

SimpleProjectNode建構函式、 like SimpleProjectFactory建構函式,會快取SimpleProjectPackage在私用欄位,以供日後使用的參考。

連線SimpleProjectFactory類別以SimpleProjectNode類別,您必須具現化新SimpleProjectNode在SimpleProjectFactory.CreateProject方法並加以快取中私用欄位,以供日後使用。

若要連接專案工廠類別和節點類別

  1. 在 SimpleProjectFactory.cs 檔案中加入下列using陳述式之後的using陳述式。

    using IOleServiceProvider =    Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
    
  2. 取代SimpleProjectFactory.CreateProject藉由使用下列程式碼的方法。

    protected override ProjectNode CreateProject() 
    { 
        SimpleProjectNode project = new SimpleProjectNode(this.package); 
    
        project.SetSite((IOleServiceProvider)        ((IServiceProvider)this.package).GetService(            typeof(IOleServiceProvider))); 
        return project; 
    }
    
  3. 重建方案並驗證它建置無誤。

測試專案節點類別

測試您的專案工廠,若要查看它是否會建立專案階層架構。

若要測試的專案節點類別

  1. 按 F5 以啟動實驗性質的 Visual Studio 執行個體。

  2. 在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。

  3. 新的專案 對話方塊後,在 Visual Studio 的已安裝的範本,請選取 SimpleProject

  4. 選取 [ 為方案建立目錄,然後輸入 MyProject 在名稱方塊。

  5. 輸入方案的位置,例如, D:\。

  6. 按一下 [確定]。

    Visual Studio 應該呼叫您的專案工廠,來建立專案。

  7. 關閉 Visual Studio 的實驗性的執行個體。

新增自訂的專案節點圖示

前一節中的 [專案] 節點圖示是一個預設圖示。 您可以變更它的自訂圖示。

若要加入自訂的專案節點圖示

  1. 以滑鼠右鍵按一下資源 資料夾中,指向 [ 新增,然後按一下 [ 新的項目。 新增點陣圖檔名為 SimpleProjectNode.bmp。 按一下 [ 新增點陣圖編輯器開啟。

  2. 屬性視窗,降低為 16 x 16 像素的點陣圖。 製作特殊的點陣圖。

    簡單專案 Comm

  3. 屬性 ] 視窗中,變更 建置動作, 點陣圖來內嵌資源

  4. 在 SimpleProjectNode.cs 中,加入下列using陳述式之後的using陳述式。

    using System.Drawing; 
    using System.Windows.Forms;
    
  5. 加入下列的靜態欄位和建構函式, SimpleProjectNode類別。

    private static ImageList imageList; 
    
    static SimpleProjectNode() 
    { 
        imageList =        Utilities.GetImageList(            typeof(SimpleProjectNode).Assembly.GetManifestResourceStream(                "Company.SimpleProject.Resources.SimpleProjectNode.bmp")); 
    }
    
  6. 將下列屬性加入至開頭SimpleProjectNode類別。

    internal static int imageIndex; 
       public override int ImageIndex 
       { 
           get { return imageIndex; } 
       }
    
  7. 藉由使用下列程式碼來取代的執行個體建構函式。

    public SimpleProjectNode(SimpleProjectPackage package) 
    { 
        this.package = package; 
    
        imageIndex = this.ImageHandler.ImageList.Images.Count; 
    
        foreach (Image img in imageList.Images) 
        { 
            this.ImageHandler.AddImage(img); 
        } 
    }
    

在靜態建構期間, SimpleProjectNode擷取組件資訊清單資源的專案節點點陣圖,並在其快取中私用欄位,以供日後使用。 請注意語法Assembly.GetManifestResourceStream影像路徑。 若要查看的資訊清單內嵌在組件中的資源名稱,請使用Assembly.GetManifestResourceNames方法。 當這個方法適用於SimpleProject組件中,結果應該如下:

  • Company.SimpleProject.Resources.resources

  • Microsoft.VisualStudio.Package.Project.resources

  • Company.SimpleProject.VSPackage.resources

  • Resources.imagelis.bmp

  • Microsoft.VisualStudio.Package.DontShowAgainDialog.resources

  • Microsoft.VisualStudio.Package.SecurityWarningDialog.resources

  • Company.SimpleProject.Resources.SimpleProjectNode.bmp

在執行個體建構期間, ProjectNode基底類別載入的 Resources.imagelis.bmp,順序是從 Resources\imagelis.bmp 的內嵌常用的 16 x 16 點陣圖。 這個點陣圖清單使用於SimpleProjectNode與 ImageHandler.ImageList。 SimpleProjectNode將專案節點點陣圖附加至清單中。 專案節點點陣圖影像清單中的位移會快取供日後使用,做為公用值ImageIndex屬性。 Visual Studio 會使用這個屬性,以判斷哪一個點陣圖,以顯示 [專案] 節點圖示。

測試自訂 [專案] 節點圖示

測試您的專案工廠,若要查看它是否會建立具有您自訂的專案節點圖示專案階層架構。

若要測試自訂的專案節點圖示

  1. 刪除 MyProject 方案。

  2. 按 F5 以啟動實驗性質的 Visual Studio 執行個體。

  3. 在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。

  4. 新的專案 對話方塊後,在 Visual Studio 的已安裝的範本,請選取 SimpleProject

  5. 選取 [ 為方案建立目錄,然後輸入 MyProject 在名稱方塊。

  6. 輸入方案的位置,例如, D:\。

  7. 按一下 [確定]。

    Visual Studio 應該建立一個專案。 請注意 SimpleProjectNode.bmp 會使用為 [專案] 節點圖示。

    簡單專案新增專案節點

  8. 程式碼編輯器中開啟 Program.cs。 您應該會看到類似下列的程式碼的原始程式碼。

    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    
    namespace $nameSpace$ 
    { 
        public class $className$ 
        { 
            static void Main(string[] args) 
            { 
                Console.WriteLine("Hello VSX!!!"); 
                Console.ReadKey(); 
            } 
        } 
    }
    

    請注意範本參數 $ 命名空間$ 和 $className$ 沒有新的值。 在下一節中,您可以實作樣板參數替換。

  9. 請按 SHIFT + F5 鍵以停止偵錯。

取代範本參數

在先前章節中,您的專案範本使用登錄 Visual Studio 藉由使用ProvideProjectFactory屬性。 註冊範本資料夾的路徑,以這種方式可讓您覆寫和擴充,以啟用基本的範本參數替換ProjectNode.AddFileFromTemplate類別。 如需詳細資訊,請參閱 新的專案產生: 在幕後,第二部

若要取代範本參數 $ 命名空間$ 和 $className$ Program.cs 檔案範本中的值,您必須加入程式碼以AddFileFromTemplate類別。

取代範本參數

  1. 在 SimpleProjectPackage.cs 檔案中加入下列using陳述式之後的using陳述式。

    using System.IO;
    
  2. 取代AddFileFromTemplate藉由使用下列程式碼的方法。

    public override void AddFileFromTemplate(
        string source, string target)
    {
        string nameSpace = 
            this.FileTemplateProcessor.GetFileNamespace(target, this);
        string className = Path.GetFileNameWithoutExtension(target);
    
        this.FileTemplateProcessor.AddReplace("$nameSpace$", nameSpace);
        this.FileTemplateProcessor.AddReplace("$className$", className);
    
        this.FileTemplateProcessor.UntokenFile(source, target);
        this.FileTemplateProcessor.Reset();
    }
    
  3. 只在之後設定中斷點,以在方法中, className設定陳述式。

設定陳述式會判斷某命名空間和新的類別名稱的合理值。 這兩個ProjectNode.FileTemplateProcessor.AddReplace方法的呼叫取代對應的範本參數值,藉由使用這些新的值。

測試範本參數替換

測試您的專案工廠,若要查看它與您的自訂的專案節點圖示會建立專案階層架構。

若要測試的範本參數替換

  1. 刪除 MyProject 方案。

  2. 按 F5 以啟動實驗性質的 Visual Studio 執行個體。

  3. 在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。

  4. 新的專案 對話方塊後,在 Visual Studio 的已安裝的範本,請選取 SimpleProject

  5. 選取 [ 為方案建立目錄,然後輸入 MyProject 在名稱方塊。

  6. 輸入方案的位置,例如, D:\。

  7. 按一下 [確定]。

    執行會在 AddFileFromTemplate 方法中的中斷點停止。

  8. 請檢查值nameSpace和className參數。

    • nameSpace提供 <RootNamespace> 的值 \Templates\Projects\SimpleProject\SimpleProject.myproj 的專案範本檔中的項目。 如此一來,則值為"MyRootNamespace"。

    • className提供類別的原始程式檔名稱,但不包括檔案名稱副檔名的值。 在這個案例中,第一個檔案複製到目的資料夾是 AssemblyInfo.cs。 因此,類別名稱的值是"AssemblyInfo"。

  9. 移除中斷點,並按下 f5 鍵繼續執行。

    Visual Studio 應該完成建立專案。

  10. 程式碼編輯器中開啟 Program.cs。 您應該會看到類似下列的程式碼的原始程式碼。

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    
    namespace MyRootNamespace 
    { 
        public class Program 
        { 
            static void Main(string[] args) 
            { 
                Console.WriteLine("Hello VSX!!!"); 
                Console.ReadKey(); 
            } 
        } 
    }
    

    請注意命名空間現在是"MyRootNamespace"和類別名稱現在是 〈 程式 〉。

  11. 在 Visual Studio 的實驗執行個體中按 F5。 新的專案應該編譯、 執行和主控台視窗中顯示"Hello VSX!"。

    簡單專案命令

恭喜您! 您已實作基本受管理的專案系統。

請參閱

概念

Visual Studio 的 SDK 內

其他資源

使用 VSPackages 自訂 Visual Studio 的逐步解說

VSPackage 商標