ASP.Net Core Nuget 创建项目模板

2021-06-30  乐帮网

nuget netcore

本教程主要介绍使用dotnet命令行来创建、安装、卸载模板。在最底部会提供相应的源代码下载。注意在使得此功能之前需要升级为.Net5.0。下面就开始我们的创建模板之旅。
一、创建目录结构
在电脑中新建以下目录结构

demo_template
├───test
└───working
    └───template

test将用于测试文件夹,working是我们主要文件夹,template这个是放置模板的文件夹,这里有一个地方是需要注意的。所有的文件夹都是可以改名的,除了template。

二、创建模板项目

新建一个单独的项目,此次我们直接使用Visaul Studio 2019创建一个控制台类型的项目,位置放到任意目录,(注意这里可以是任意类型项目,也可以是任意版本项目),项目名称:vkt.demo.console,默认创建好后我们修改一下输出方法如下:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello lebang2020.cn!");
        }
    }

然后把项目文件和相关的类复制到 template文件夹中。
目录结构变成这样:

demo_template
├───test
└───working
    └───template
    └───vkt.demo.console

三、创建模板配置文件

模板项目我们已经放置到位了,下一步就是新建一个模板配置文件。我们在以上的vkt.demo.console中新建一个文件夹 .template.config。然后在这个文件夹中新建一个json配置文件 template.json。注意 .template.config/template.json这些名称是固定的。不要修改它。
目录结构是这样的

demo_template
├───test
└───working
    └───template
    └───vkt.demo.console
        └───Program.cs
        └───vkt.demo.console.csproj
        └───.template.config
            └───template.json

其中 template.json中的内容为:

{
  "$schema": "http://json.schemastore.org/template",
  "author": "lebang2020",
  "classifications": [ "Common", "Console" ],
  "identity": "vkt.demo.template.console",
  "name": "vkt demo templates: console extensions",
  "shortName": "vktconsole",
  "tags": {
    "language": "C#",
    "type": "project"
  }
}

四、新建打包项目

打包项目的意义在于传递打包参数,包含打包的内容待信息。这里我们在working目录下新建项目文件templatepack.csproj,内容如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <PackageType>Template</PackageType>
    <PackageVersion>1.0</PackageVersion>
    <PackageId>vkt.demo.template.console</PackageId>
    <Title>vkt templates</Title>
    <Authors>lebang2020</Authors>
    <Description>This is a vkt demo template just for lebanag2020 Corporation.</Description>
    <PackageTags>dotnet-new;templates;contoso</PackageTags>
    <TargetFramework>netstandard2.0</TargetFramework>
    <IncludeContentInPack>true</IncludeContentInPack>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <ContentTargetFolders>content</ContentTargetFolders>
    <NoWarn>$(NoWarn);NU5128</NoWarn>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="templates\**\*" Exclude="templates\**\bin\**;templates\**\obj\**" />
    <Compile Remove="**\*" />
  </ItemGroup>

</Project>

可见通过ItemGroup/Content 我们可以灵活控制模板的内容。

五、生成打包文件

首先打开CMD命令行,再切换到working目录下。执行以下命令:

dotnet pack
D:\Demo\demo_template\working>dotnet pack
用于 .NET 的 Microsoft (R) 生成引擎版本 16.10.1+2fd48ab73
版权所有(C) Microsoft Corporation。保留所有权利。

  正在确定要还原的项目…
  所有项目均是最新的,无法还原。
  templatepack -> D:\Demo\demo_template\working\bin\Debug\netstandard2.0\templatepack.dll
  已成功创建包“D:\Demo\demo_template\working\bin\Debug\vkt.demo.template.console.1.0.0.nupkg”。

最终我们得到了包 vkt.demo.template.console.1.0.0.nupkg

六、安装使用包

nupkg包的目录:D:\Demo\demo_template\working\bin\Debug\vkt.demo.template.console.1.0.0.nupkg
下面我们使用这个包,当然也可以上传到自己的nuget服务器上,然后配置一个源就搞定了。这里我以本的包来做测试。
安装包:

dotnet new -i D:\Demo\demo_template\working\bin\Debug\vkt.demo.template.console.1.0.0.nupkg


模板名                                           短名称                  语言          标记
--------------------------------------------  -------------------  ----------  ----------------------
Console Application                           console              [C#],F#,VB  Common/Console
vkt demo templates: console extensions        vktconsole           [C#]        Common/Console
Class library                                 classlib             [C#],F#,VB  Common/Library
WPF Application                               wpf                  [C#],VB     Common/WPF
WPF Class library                             wpflib               [C#],VB     Common/WPF
WPF Custom Control Library                    wpfcustomcontrollib  [C#],VB     Common/WPF
WPF User Control Library                      wpfusercontrollib    [C#],VB     Common/WPF
Windows Forms App                             winforms             [C#],VB     Common/WinForms
Windows Forms Control Library                 winformscontrollib   [C#],VB     Common/WinForms
Windows Forms Class Library                   winformslib          [C#],VB     Common/WinForms
Worker Service                                worker               [C#],F#     Common/Worker/Web
MSTest Test Project                           mstest               [C#],F#,VB  Test/MSTest
NUnit 3 Test Project                          nunit                [C#],F#,VB  Test/NUnit
NUnit 3 Test Item                             nunit-test           [C#],F#,VB  Test/NUnit
xUnit Test Project                            xunit                [C#],F#,VB  Test/xUnit
Razor Component                               razorcomponent       [C#]        Web/ASP.NET
Razor Page                                    page                 [C#]        Web/ASP.NET
MVC ViewImports                               viewimports          [C#]        Web/ASP.NET
MVC ViewStart                                 viewstart            [C#]        Web/ASP.NET
Blazor Server App                             blazorserver         [C#]        Web/Blazor
Blazor WebAssembly App                        blazorwasm           [C#]        Web/Blazor/WebAssembly
ASP.NET Core Empty                            web                  [C#],F#     Web/Empty
ASP.NET Core Web App (Model-View-Controller)  mvc                  [C#],F#     Web/MVC
ASP.NET Core Web App                          webapp               [C#]        Web/MVC/Razor Pages
ASP.NET Core with Angular                     angular              [C#]        Web/MVC/SPA
ASP.NET Core with React.js                    react                [C#]        Web/MVC/SPA
ASP.NET Core with React.js and Redux          reactredux           [C#]        Web/MVC/SPA
Razor Class Library                           razorclasslib        [C#]        Web/Razor/Library
ASP.NET Core Web API                          webapi               [C#],F#     Web/WebAPI
ASP.NET Core gRPC Service                     grpc                 [C#]        Web/gRPC
dotnet gitignore file                         gitignore                        Config
global.json file                              globaljson                       Config
NuGet Config                                  nugetconfig                      Config
Dotnet local tool manifest file               tool-manifest                    Config
Web Config                                    webconfig                        Config
Solution File                                 sln                              Solution
Protocol Buffer File                          proto                            Web/gRPC

Examples:
    dotnet new mvc --auth Individual
    dotnet new blazorserver --auth Individual
    dotnet new --help
    dotnet new vktconsole --help

这个时候我们看到了关键字vktconsole,证明已经安装成功了。下面就是使用:首先换成到test 文件夹下,执行命令:dotnet new vktconsole

D:\Demo\demo_template\working\test>dotnet new vktconsole
已成功创建模板“vkt demo templates: console extensions”。

至此在test文件夹下可以看到按模板创建的项目。这个正是我们需要的。写在最后:我们可以使用dotnet new -u 进行卸载包。那么我的卸载命令就是 dotnet new -u vkt.demo.template.console

可以使用dotnet new -l 来查看可用的ID。更多的信息参考以下链接:

https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-new

https://docs.microsoft.com/zh-cn/dotnet/core/tutorials/cli-templates-create-template-pack

我把自己的源码打包入到了云盘上地址如下:
链接:https://pan.baidu.com/s/1ShcnRzFrvZOfPhqCSytdyg 

 

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力