时间:2023-06-06 15:51:01 | 来源:网站运营
时间:2023-06-06 15:51:01 来源:网站运营
推荐:打造自己的.NET Core项目模板:本文已收录于:.NET Core开发精选文章目录,持续更新,欢迎投稿!template.json
!.template.config
,同时在这个文件夹下面创建template.json。{ "author": "Catcher Wong", //必须 "classifications": [ "Web/WebAPI" ], //必须,这个对应模板的Tags "name": "TplDemo", //必须,这个对应模板的Templates "identity": "TplDemoTemplate", //可选,模板的唯一名称 "shortName": "tpl", //必须,这个对应模板的Short Name "tags": { "language": "C#" , "type":"project" }, "sourceName": "TplDemo", // 可选,要替换的名字 "preferNameDirectory": true // 可选,添加目录 }
在这里,有几个比较重要的东西,一个是shortName,一个是sourceName。-h
就绝对不写 ``--help`template.json
之后,还需要安装一下这个模板到我们的cli
中。dotnet new -i
进行模板的安装。dotnet new -i ./content/TplDemo
这里要注意的是,与.template.config
文件夹同级的目录,都会被打包进模板中。 在执行安装命令之后,就可以看到我们的模板已经安装好了。dotnet new tpl -h
因为我们目前还没有设置参数,所以这里显示的是还没有参数。RequestLogMiddleware
,就用它来做例子。template.json
中添加过滤EnableRequestLog
的symbol
。同时指定源文件{ "author": "Catcher Wong", //others... "symbols":{ //是否启用RequestLog这个Middleware "EnableRequestLog": { "type": "parameter", //它是参数 "dataType":"bool", //bool类型的参数 "defaultValue": "false" //默认是不启用 } }, "sources": [ { "modifiers": [ { "condition": "(!EnableRequestLog)", //条件,由EnableRequestLog参数决定 "exclude": [ //排除下面的文件 "src/TplDemo/Middlewares/RequestLogMiddleware.cs", "src/TplDemo/Middlewares/RequestLogServiceCollectionExtensions.cs" ] } ] } ] }
第二步,在模板的代码中做一下处理Startup.cs
,因为Middleware就是在这里启用的。 using System; //other using... using TplDemo.Core;#if (EnableRequestLog) using TplDemo.Middlewares;#endif /// <summary> /// /// </summary> public class Startup { public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //other code....#if (EnableRequestLog) //request Log app.UseRequestLog();#endif app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } }
这样的话,只要EnableRequestLog
是true,那么就可以包含这两段代码了。dotnet new tpl -n NoLog
这个命令等价于dotnet new tpl -n WithLog -E false
下面是建好之后的目录结构和Startup.csdotnet new tpl -n WithLog -E true
可以看到,效果已经出来了。template.json
,加入下面的内容{ "author": "Catcher Wong", //others "symbols":{ "sqlType": { "type": "parameter", "datatype": "choice", "choices": [ { "choice": "MsSQL", "description": "MS SQL Server" }, { "choice": "MySQL", "description": "MySQL" }, { "choice": "PgSQL", "description": "PostgreSQL" }, { "choice": "SQLite", "description": "SQLite" } ], "defaultValue": "MsSQL", "description": "The type of SQL to use" }, "MsSQL": { "type": "computed", "value": "(sqlType == /"MsSQL/")" }, "MySQL": { "type": "computed", "value": "(sqlType == /"MySQL/")" }, "PgSQL": { "type": "computed", "value": "(sqlType == /"PgSQL/")" }, "SQLite": { "type": "computed", "value": "(sqlType == /"SQLite/")" } }}
看了上面的JSON内容之后,相信大家也知道个所以然了。有一个名为sqlType的参数,它有几中数据库选择,默认是MsSQL。<ItemGroup Condition="'$(MySQL)' == 'True' "> <PackageReference Include="MySqlConnector" Version="0.47.1" /></ItemGroup><ItemGroup Condition="'$(PgSQL)' == 'True' "> <PackageReference Include="Npgsql" Version="4.0.3" /></ItemGroup><ItemGroup Condition="'$(SQLite)' == 'True' "> <PackageReference Include="Microsoft.Data.Sqlite" Version="2.1.0" /></ItemGroup>
同样的,代码也要做相应的处理#if (MsSQL) using System.Data.SqlClient;#elif (MySQL) using MySql.Data.MySqlClient;#elif (PgSQL) using Npgsql;#else using Microsoft.Data.Sqlite;#endif protected DbConnection GetDbConnection() {#if (MsSQL) return new SqlConnection(_connStr);#elif (MySQL) return new MySqlConnection(_connStr);#elif (PgSQL) return new NpgsqlConnection(_connStr);#else return new SqliteConnection(_connStr);#endif }
修改好之后,同样要去重新安装这个模板,安装好之后,就可以看到sqlType这个参数了。dotnet new tpl -n MsSQLTest -s MsSQL dotnet new tpl -n PgSQLTest -s PgSQL
然后打开对应的csproj关键词:项目,模板,打造,推荐