using System.Data; #if MSSQL using Microsoft.Data.SqlClient; #elif MySQL using MySql.Data.MySqlClient; #endif namespace DynamicTplDemo.Infrastructure { /// <summary> /// 数据库上下文 /// </summary> public class DbContext { /// <summary> /// 连接字符串 /// </summary> private string _connStr; public DbContext(string connStr) { _connStr = connStr; } /// <summary> /// 打开连接 /// </summary> /// <returns></returns> public IDbConnection OpenConnection() { IDbConnection conn = null; #if MSSQL conn = new SqlConnection(); #elif MySQL conn = new MySqlConnection(); #endif conn.ConnectionString = _connStr; conn.Open(); return conn; } } }
DynamicTplDemo.Infrastructure.csproj文件中,通过节点PackageReference的Condition属性的表达式切换。完整内容如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Data.SqlClient" Version="3.0.0-preview1.21075.2" Condition="'$(MSSQL)'=='true'" /> <PackageReference Include="MySql.Data" Version="8.0.23" Condition="'$(MySql)'=='true'" /> </ItemGroup> </Project>
安装模板
安装命令:
dotnet new -i E:\SourceCode\MyPractices\MyTestTemplates\templates\DynamicTplDemo\src
查看该模板信息,执行命令:
dotnet new DynamicTpl --help
可以看到,该模板增加了选项-S|--SqlType,且该选项的可选值有MSSQL和MySQL。
执行命令:
dotnet new DynamicTplDemoAPI -n MyDynamicApi -o E:\SourceCode\MyPractices\MyTestTemplates\codes\MyDynamicApi -S MSSQL
提示如下,则表示成功:
文件夹结构如下:
代码结构如下,可以看到自动引入了MSSQL的驱动包:
DbContext.cs文件中,也可以看到仅包含了MSSQL的引用,以及SqlConnection类:
using System.Data; using Microsoft.Data.SqlClient; namespace MyDynamicApi.Infrastructure { /// <summary> /// 数据库上下文 /// </summary> public class DbContext { /// <summary> /// 连接字符串 /// </summary> private string _connStr; public DbContext(string connStr) { _connStr = connStr; } /// <summary> /// 打开连接 /// </summary> /// <returns></returns> public IDbConnection OpenConnection() { IDbConnection conn = null; conn = new SqlConnection(); conn.ConnectionString = _connStr; conn.Open(); return conn; } } }
模板打包成Nuget包,并上传Nuget服务器
以上便是创建和使用模板的方法,但是直接将文件夹安装为模板,不是一个好的用法。因为在实际工作中,其他机器上需要使用该模板,就要把文件夹复制过去安装,很不方便。那这里就分享一下将模板打包称Nuget包,并上传到Nuget服务器,其他机器只需要执行两行命令,就可以轻松使用上模板。
模板打包 创建文件夹建议在templates文件夹的同级新建文件夹:packages、tools。
tools:存放工具软件,下面内容会讲到。
packages:存放生成的包,下面内容会讲到
下载路径:https://www.nuget.org/downloads
选择合适的版本,下载到上面新建的tools文件夹下。
参考文档:https://docs.microsoft.com/zh-cn/nuget/create-packages/creating-a-package
在模板项目的根目录下创建.nuspec文件,本部分内容在上面创建的动态模板上进行,故选择命名:DynamicTplDemo.nuspec。
文件内容如下: