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

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

熱門標(biāo)簽:海南人工外呼系統(tǒng)哪家好 高德地圖標(biāo)注公司位置需要錢嗎 廊坊地圖標(biāo)注申請(qǐng)入口 慶陽(yáng)外呼系統(tǒng)定制開(kāi)發(fā) 襄陽(yáng)外呼增值業(yè)務(wù)線路解決方案 地圖標(biāo)注資源分享注冊(cè) 北京外呼系統(tǒng)咨詢電話 合肥阿里辦理400電話號(hào) 怎么去掉地圖標(biāo)注文字

前言:

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

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

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

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

 本次我們來(lái)創(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)目名稱;來(lái)設(shè)置代碼中的命名空間、輸出程序名稱等信息。

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

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

參數(shù) 說(shuō)明
clrversion 公共語(yǔ)言運(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 來(lái)自 HKLM\Software\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization 的注冊(cè)表項(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)
{
    //注冊(cè)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è)置名稱、說(shuō)明、圖標(biāo)等內(nèi)容

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

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

  B、彈出:導(dǎo)出模板向?qū)ы?yè)面

  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)目添加語(yǔ)言、平臺(tái)和項(xiàng)目類型等標(biāo)簽

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

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

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

  解壓文件后,對(duì)該文件進(jìn)行編輯,添加語(yǔ)言標(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>
    !--語(yǔ)言標(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)容:

語(yǔ)言標(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)
查詢語(yǔ)言 (querylanguage) Windows (windows) 庫(kù) (library)
TypeScript (typescript) Xbox (xbox) 機(jī)械學(xué)習(xí) (machinelearning)
Visual Basic (visualbasic)   移動(dòng) (mobile)
    Office (office)
    其他 (other)
    服務(wù) (service)
    測(cè)試 (test)
    UWP (uwp)
    Web (web)

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

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

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

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

 

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

三、總結(jié):

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

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

 項(xiàng)目模板作用非常大,可以將日常積累的功能合并在模板中,可以避免項(xiàng)目開(kāi)發(fā)中重復(fù)造輪子,提高開(kāi)發(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)容請(qǐng)搜索腳本之家以前的文章或繼續(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模板過(guò)程詳解
  • vscode vue 文件模板的配置方法
  • vs.net2008添加模板方法

標(biāo)簽:鶴崗 株洲 商丘 鎮(zhèn)江 臺(tái)州 綿陽(yáng) 平頂山 哈密

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《VS2019 自定義項(xiàng)目模板的實(shí)現(xiàn)方法》,本文關(guān)鍵詞  VS2019,自定義,項(xiàng)目,模板,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《VS2019 自定義項(xiàng)目模板的實(shí)現(xiàn)方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于VS2019 自定義項(xiàng)目模板的實(shí)現(xiàn)方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章