VS2019 自定義項(xiàng)目模板的實(shí)現(xiàn)方法
前言:
使用“宇宙最強(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.UseStartup<Startup>(); }); } }
如代碼中需要使用項(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
到此這篇關(guān)于VS2019 自定義項(xiàng)目模板的文章就介紹到這了,更多相關(guān)VS2019 自定義項(xiàng)目模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vscode vue 文件模板的配置方法
- 使用vscode快速建立vue模板過(guò)程詳解
- 在VScode中創(chuàng)建你的代碼模板的方法
- Vscode中快速創(chuàng)建自定義代碼模板的方法
- VsCode里的Vue模板的實(shí)現(xiàn)
- 在vscode 中設(shè)置 vue模板內(nèi)容的方法
- vscode自定義vue模板的實(shí)現(xiàn)
- vsCode一鍵生成vue模板
- Vscode自定義注釋模板的實(shí)現(xiàn)示例
- VS2022添加代碼模板的實(shí)現(xiàn)步驟(圖文)
- VisualStudio2022制作多項(xiàng)目模板及Vsix插件的實(shí)現(xiàn)
相關(guān)文章
基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程
JWT(json web token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)。下面這篇文章主要給大家介紹了關(guān)于基于Token的身份驗(yàn)證之JWT的基礎(chǔ)相關(guān)資料,文中通過(guò)示例代碼的非常詳細(xì),需要的朋友可以參考下2018-09-09C++ Go語(yǔ)言實(shí)現(xiàn)將windows和linux文件刪除至回收站
這篇文章主要為大家詳細(xì)介紹了如何分別使用C++ Go語(yǔ)言實(shí)現(xiàn)將windows和linux文件刪除至回收站,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12都2019年了,還問(wèn)http中GET和POST的區(qū)別
最近看了一些同學(xué)的面經(jīng),發(fā)現(xiàn)無(wú)論什么技術(shù)崗位,還是會(huì)問(wèn)到 get 和 post 的區(qū)別,而搜索出來(lái)的答案并不能讓我們裝得一手好逼,那就讓我們從 HTTP 報(bào)文的角度來(lái)擼一波,從而搞明白他們的區(qū)別2019-02-02Matlab使用Plot函數(shù)實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)顯示方法總結(jié)
這篇文章主要介紹了Matlab使用Plot函數(shù)實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)顯示方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02比特幣上的數(shù)獨(dú)游戲合約的實(shí)現(xiàn)代碼
這篇文章主要介紹了比特幣上的數(shù)獨(dú)游戲合約的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-015個(gè)Linux平臺(tái)程序員最愛(ài)的開(kāi)發(fā)工具匯總
這篇文章主要介紹了5個(gè)Linux平臺(tái)程序員最愛(ài)的開(kāi)發(fā)工具匯總,程序最重要的工具就是源碼編輯器了,或者是一個(gè)全能的IDE,本文就羅列了5個(gè)Linux平臺(tái)最常用的編輯給大家,需要的朋友可以參考下2014-09-09