主頁 > 知識庫 > VS2019 自定義項(xiàng)目模板的實(shí)現(xiàn)方法

VS2019 自定義項(xiàng)目模板的實(shí)現(xiàn)方法

熱門標(biāo)簽:銀行業(yè)務(wù) 智能手機(jī) 美圖手機(jī) 鐵路電話系統(tǒng) 檢查注冊表項(xiàng) 呼叫中心市場需求 網(wǎng)站文章發(fā)布 服務(wù)器配置

前言:

使用“宇宙最強(qiáng)IDE”開發(fā)項(xiàng)目時(shí),都需要根據(jù)不同情況選擇一個(gè)項(xiàng)目模板,來滿足開發(fā)需求:如下

VS為我們提供了基礎(chǔ)的項(xiàng)目模板,但現(xiàn)有項(xiàng)目模板未包含基礎(chǔ)功能如:日志輸出、審計(jì)日志、SwaggerUI、認(rèn)證等,那么我們能否自定義項(xiàng)目模板來滿足我們的需求呢?答案當(dāng)然是肯定的

 那么接下來開始實(shí)現(xiàn)自定義項(xiàng)目模板的創(chuàng)建

一、自定義項(xiàng)目模板創(chuàng)建

 本次我們來創(chuàng)建一個(gè)實(shí)現(xiàn)了基礎(chǔ)功能的webapi模板

 創(chuàng)建自定義的項(xiàng)目模板,有以下幾個(gè)步驟:

 1、創(chuàng)建原始的項(xiàng)目(模板項(xiàng)目)

  創(chuàng)建WebApi項(xiàng)目:

  實(shí)現(xiàn)WebApi相關(guān)基礎(chǔ)功能:SwaggerUI、認(rèn)證、性能監(jiān)控(MiniProfiler)等基礎(chǔ)功能;可以在之前博客內(nèi)容中查看實(shí)現(xiàn)具體方式

 2、替換模板項(xiàng)目的參數(shù)

  此時(shí)模板的基礎(chǔ)功能已經(jīng)實(shí)現(xiàn),但是在創(chuàng)建項(xiàng)目時(shí),會(huì)根據(jù)輸入的項(xiàng)目名稱;來設(shè)置代碼中的命名空間、輸出程序名稱等信息。

  那么是如何實(shí)現(xiàn)的呢?——模板參數(shù)

  當(dāng)前支持的內(nèi)置項(xiàng)目參數(shù)如下表:(模板參數(shù)區(qū)分大小寫。)

參數(shù) 說明
clrversion 公共語言運(yùn)行時(shí) (CLR) 的當(dāng)前版本。
ext_* 將 ext_ 前綴添加到任何參數(shù),以引用父模板的變量。 例如,ext_safeprojectname。
guid[1-10] 一個(gè)用于替換項(xiàng)目文件中的項(xiàng)目 GUID 的 GUID。 可指定最多 10 個(gè)唯一的 GUID(例如,guid1)。
itemname 在其中使用參數(shù)的文件的名稱。
machinename 當(dāng)前的計(jì)算機(jī)名稱(例如,Computer01)。
projectname 創(chuàng)建項(xiàng)目時(shí)由用戶提供的名稱。
registeredorganization 來自 HKLM\Software\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization 的注冊表項(xiàng)值。
rootnamespace 當(dāng)前項(xiàng)目的根命名空間。 此參數(shù)僅適用于項(xiàng)模板。
safeitemname 與 itemname 相同,但所有不安全字符和空格替換為了下劃線。
safeitemrootname 與 safeitemname 相同。
safeprojectname 用戶在創(chuàng)建項(xiàng)目時(shí)提供的名稱,但名稱中刪除了所有不安全字符和空格。
time 以 DD/MM/YYYY 00:00:00 格式表示的當(dāng)前時(shí)間。
specifiedsolutionname 解決方案的名稱。 在選中“創(chuàng)建解決方案目錄”時(shí),specifiedsolutionname 具有解決方案名稱。 在未選中“創(chuàng)建解決方案目錄”時(shí),specifiedsolutionname 為空。
userdomain 當(dāng)前的用戶域。
username 當(dāng)前的用戶名稱。
webnamespace 當(dāng)前網(wǎng)站的名稱。 此參數(shù)在 Web 窗體模板中用于保證類名是唯一的。 如果網(wǎng)站在 Web 服務(wù)器的根目錄下,則此模板參數(shù)解析為 Web 服務(wù)器的根目錄。
year 以 YYYY 格式表示的當(dāng)前年份。

  如:設(shè)置代碼文件中命名空間定義:

namespace $safeprojectname$
{
     /// summary>
    /// 作者:$username$
    /// 時(shí)間:$time$
    /// 機(jī)器名:$machinename$
    /// 項(xiàng)目名:$projectname$
    /// /summary>
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartupStartup>();
                });
    }
}

  如代碼中需要使用項(xiàng)目名稱依舊采用$safeprojectname$;如:

public void ConfigureServices(IServiceCollection services)
{
    //注冊Swagger生成器,定義一個(gè)和多個(gè)Swagger 文檔
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "$safeprojectname$ API", Version = "v1" });
        // other
    });
}

  除了VS自帶的模板參數(shù)外,用戶還可以自定義模板參數(shù),但現(xiàn)實(shí)用到的不多

 3、導(dǎo)出模板源項(xiàng)目,指定模板項(xiàng)目設(shè)置名稱、說明、圖標(biāo)等內(nèi)容

  模板基本內(nèi)容實(shí)現(xiàn)完成后,則可以進(jìn)行模板導(dǎo)出操作,步驟如下:

  A、進(jìn)入菜單:項(xiàng)目->導(dǎo)出模板

  B、彈出:導(dǎo)出模板向?qū)ы撁?/p>

  C、設(shè)置模板相關(guān)信息,點(diǎn)擊完成;則模板創(chuàng)建成功

  輸出位置為自定義模板導(dǎo)出存儲(chǔ)位置;

  【自動(dòng)將模板導(dǎo)入 Visual Studio】選項(xiàng),選中后會(huì)將項(xiàng)目模板復(fù)制一份,放入到特定的文件夾中,下次建立新項(xiàng)目就可以搜索使用。

 4、模板項(xiàng)目添加語言、平臺(tái)和項(xiàng)目類型等標(biāo)簽

  前面的步驟已經(jīng)完成對模板的創(chuàng)建,但是在創(chuàng)建項(xiàng)目時(shí),可以根據(jù)項(xiàng)目平臺(tái)、語言、項(xiàng)目類型標(biāo)簽過濾,那么如何實(shí)現(xiàn)項(xiàng)目模板標(biāo)簽?zāi)兀?/p>

  接下來對3步驟中生成的項(xiàng)目模板進(jìn)行研究:

  打開模板文件的壓縮文件中發(fā)現(xiàn)了模板文件

  解壓文件后,對該文件進(jìn)行編輯,添加語言標(biāo)簽(LanguageTag)、平臺(tái)標(biāo)簽(PlatformTag)、項(xiàng)目類型標(biāo)簽(ProjectTypeTag):  

VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  TemplateData>
    !--項(xiàng)目名稱-->
    Name>ApiTemplate/Name>
    !--項(xiàng)目描述-->
    Description>基礎(chǔ)API模板:支持SwaggerUI、認(rèn)證、性能監(jiān)控等基礎(chǔ)功能/Description>
    !--項(xiàng)目類型-->
    ProjectType>CSharp/ProjectType>
    ProjectSubType>
    /ProjectSubType>
    SortOrder>1000/SortOrder>
    !--指定在實(shí)例化項(xiàng)目時(shí)是否創(chuàng)建包含文件夾。-->
    CreateNewFolder>true/CreateNewFolder>
    !--缺省名稱-->
    DefaultName>ApiTemplate/DefaultName>
    ProvideDefaultName>true/ProvideDefaultName>
    LocationField>Enabled/LocationField>
    EnableLocationBrowseButton>true/EnableLocationBrowseButton>
    CreateInPlace>true/CreateInPlace>
    !--語言標(biāo)簽-->
    LanguageTag>CSharp/LanguageTag>
    LanguageTag>Javascript/LanguageTag>
    !--平臺(tái)標(biāo)簽-->
    PlatformTag>Windows/PlatformTag>
    PlatformTag>Linux/PlatformTag>
    !--項(xiàng)目標(biāo)簽-->
    ProjectTypeTag>Web/ProjectTypeTag>
    !--圖標(biāo)-->
    Icon>__TemplateIcon.png/Icon>
    PreviewImage>__PreviewImage.png/PreviewImage>
  /TemplateData>
  TemplateContent>
    Project TargetFileName="ApiProjectTemplates.csproj" File="ApiProjectTemplates.csproj" ReplaceParameters="true">
      Folder Name="Properties" TargetFolderName="Properties">
        ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json/ProjectItem>
      /Folder>
      Folder Name="Controllers" TargetFolderName="Controllers">
        ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecastController.cs">WeatherForecastController.cs/ProjectItem>
      /Folder>
      ProjectItem ReplaceParameters="true" TargetFileName="appsettings.json">appsettings.json/ProjectItem>
      ProjectItem ReplaceParameters="true" TargetFileName="appsettings.Development.json">appsettings.Development.json/ProjectItem>
      ProjectItem ReplaceParameters="true" TargetFileName="JwtSetting.cs">JwtSetting.cs/ProjectItem>
      ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs/ProjectItem>
      ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs/ProjectItem>
      ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecast.cs">WeatherForecast.cs/ProjectItem>
    /Project>
  /TemplateContent>
/VSTemplate>

  下表是 Visual Studio 中可用的以上描述標(biāo)簽的取值內(nèi)容:

語言標(biāo)簽(LanguageTag) 平臺(tái)標(biāo)簽(PlatformTag) 項(xiàng)目類型標(biāo)簽(ProjectTypeTag)
C (cpp) Android (android) 云 (cloud)
C# (csharp) Azure (azure) 控制臺(tái) (console)
F# (fsharp) iOS (ios) 桌面 (desktop)
Java (java) Linux (linux) 擴(kuò)展 (extension)
JavaScript (javascript) macOS (macos) 游戲 (games)
Python (python) tvOS (tvos) IoT (iot)
查詢語言 (querylanguage) Windows (windows) 庫 (library)
TypeScript (typescript) Xbox (xbox) 機(jī)械學(xué)習(xí) (machinelearning)
Visual Basic (visualbasic)   移動(dòng) (mobile)
    Office (office)
    其他 (other)
    服務(wù) (service)
    測試 (test)
    UWP (uwp)
    Web (web)

  最后將修改的文件打包成zip壓縮(必須為zip文件)文件后,復(fù)制到項(xiàng)目模板所在位置(%USERPROFILE%\Documents\Visual Studio 2019\Templates\ProjectTemplates)    

二、 自定義項(xiàng)目模板使用

 前面步驟已完成模板創(chuàng)建,接下來就驗(yàn)證模板是否生效:

 打開vs進(jìn)入項(xiàng)目創(chuàng)建界面,搜索API,如下:

 

 到此項(xiàng)目設(shè)置的標(biāo)簽以及代碼中命名空間、注釋都已生效。項(xiàng)目模板效果已實(shí)現(xiàn)

三、總結(jié):

 所有項(xiàng)目模板和項(xiàng)模板(無論是與 Visual Studio 一起安裝的還是由你創(chuàng)建的)均通過使用相同的原則工作并具有類似的內(nèi)容。所有模板均包含以下項(xiàng):

使用模板時(shí)要?jiǎng)?chuàng)建的文件。這些文件包括源代碼文件、嵌入資源、項(xiàng)目文件等。一個(gè) .vstemplate 文件,其中包含根據(jù)模板創(chuàng)建項(xiàng)目或項(xiàng)以及在“創(chuàng)建新項(xiàng)目”頁面或“添加新項(xiàng)”對話框中顯示模板所需的元數(shù)據(jù)。當(dāng)這些文件壓縮成 .zip 文件并放在正確的文件夾時(shí),Visual Studio 將自動(dòng)在以下位置顯示這些文件:在“創(chuàng)建新項(xiàng)目”頁面中顯示項(xiàng)目模板。在“添加新項(xiàng)”窗口中顯示項(xiàng)模板。

 項(xiàng)目模板作用非常大,可以將日常積累的功能合并在模板中,可以避免項(xiàng)目開發(fā)中重復(fù)造輪子,提高開發(fā)效率

參考內(nèi)容

 https://docs.microsoft.com/zh-cn/visualstudio/ide/creating-project-and-item-templates?view=vs-2019

 https://docs.microsoft.com/zh-cn/visualstudio/extensibility/vsix-project-template?view=vs-2019

 https://docs.microsoft.com/zh-cn/visualstudio/extensibility/vstemplate-element-visual-studio-templates?view=vs-2019

到此這篇關(guān)于VS2019 自定義項(xiàng)目模板的文章就介紹到這了,更多相關(guān)VS2019 自定義項(xiàng)目模板內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • vscode自定義vue模板的實(shí)現(xiàn)
  • 在vs code 中如何創(chuàng)建一個(gè)自己的 Vue 模板代碼
  • VsCode里的Vue模板的實(shí)現(xiàn)
  • Vscode中快速創(chuàng)建自定義代碼模板的方法
  • 在VScode中創(chuàng)建你的代碼模板的方法
  • 使用vscode快速建立vue模板過程詳解
  • vscode vue 文件模板的配置方法
  • vs.net2008添加模板方法

標(biāo)簽:沈陽 新疆 紅河 樂山 上海 滄州 河南 長治

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《VS2019 自定義項(xiàng)目模板的實(shí)現(xiàn)方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266