C# WinForm自制项目模板入坑记

1. 创建模板配置

1.1 在项目目录中创建.template.config文件夹
1.2 创建一个名为“template.json” 的新文件

{
  "author": "5DThinking",
  "classifications": [ "WinForm" ],  //对应模板的Tags
  "identity": "5DThinking.Demo",  //模板的唯一名称
  "name": "5DThinking.Demo",  //对应模板的Templates
  "shortName": "abc",  //【修改】短名称,使用 dotnet new <shortName> 安装模板时的名称
  "tags": {
    "language": "C#",
    "type": "project"
  }
  "sourceName": "xxx",  // 【修改】在使用 -n 选项时,会替换模板中项目的名字xxx
  "preferNameDirectory": true  // 可选,添加目录 
}

注意:"sourceName": "xxx"指明模板中将要被替换的字符串

2. 安装模板

运行命令dotnet new -i .以安装位于当前文件夹的模板

3. 测试模板

运行命令dotnet new abc -n 5DThinking.Test -o TestTemplate,新项目成功在TestTemplate目录下生成,名字也都统一改为5DThinking.Test

4. 遇到的坑

现在运行新项目,出现一堆错误,主要是两类:1.NuGet包还原问题 2..resx文件报错
临时解决办法:

  1. 从模板项目lib目录中复制.dll文件到新项目相应目录中并覆盖,在项目中重新引用
  2. 从模板项目复制.resx文件到新项目相应目录中并覆盖

注:这个解决办法是野路子,虽然也行,但比较Low,下面尝试打包的方式来解决

5. 用NuGet生成包

5.1 根目录GMS下创建ContentGMSTemplate目录,将模板文件及文件夹都复制进来
5.2 template.json文件修改为:

{
    "$schema": "http://json.schemastore.org/template",
	"author": "5DThinking",
    "classifications": [ "WinForm" ],
    "name": "5DThinking WinForm GMS v1.0",
    "identity": "GMS.WinForm.1.0.Template", 
    "shortName": "gms1.0",
    "tags": {
      "language": "C#" ,
      "type":"project"
    },
    "sourceName": "Thinking.GMS",
    "preferNameDirectory": true
}

5.3 在GMS目录下创建GMSTemplate.nuspec文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>GMSTemplate</id>
    <version>1.0.1</version>
    <description>
      GMS(General Management System) For WinForm 
    </description>
    <authors>5DThinking</authors>
    <packageTypes>
      <packageType name="Template" />
    </packageTypes>
  </metadata>
</package>

5.4 用NuGet打包,在GMS目录下执行命令nuget pack GMSTemplate.nuspec -OutputDirectory .,然后生成GMSTemplate.1.0.1.nupkg文件
5.5 在GMS目录下创建CreateYourProject.bat文件,内容如下:

color 4
dotnet new -i GMSTemplate.1.0.1.nupkg
set /p OP=Please set your project name(for example:Baidu.Api):
md .1YourProject
cd .1YourProject
dotnet new gms1.0 -n %OP%
cd ../
echo "Create Successfully!!!! ^ please see the folder .1YourProject"
dotnet new -u GMSTemplate
echo "Delete Template Successfully"
pause

5.6 双击执行CreateYourProject.bat文件,按提示输入新的项目名称,大功告成!

原文地址:https://www.cnblogs.com/zhaoshujie/p/12516072.html