通过dotnet cli中的自定义模板创建类时如何检测命名空间

Posted

技术标签:

【中文标题】通过dotnet cli中的自定义模板创建类时如何检测命名空间【英文标题】:how to detect namespace when creating a class through a custom template in dotnet cli 【发布时间】:2022-01-08 10:47:09 【问题描述】:

我正在制作一个自定义类 dotnet 新模板,下面是我的 template.json。这可行,但我不知道如何检测当前命名空间并替换它。

模板.json:


    "$schema": "http://json.schemastore.org/template",
    "author": "name",
    "classifications": [ "core", "console", "class" ],
    "tags": 
      "language": "C#",
      "type": "item"
    ,
    "identity": "Template.ClassTemplate",
    "name": "Editable Class Template",
    "shortName": "class",
    "sourceName": "Class1"

C#模板代码文件名为Class1.cs:

using System;

namespace newClass

    public class Class1
        
    

创建新类的命令行: dotnet new class -n class_name

生成的 c# 文件如下并命名为 class_name.cs:

using System;

namespace newClass

    public class class_name
        
    

我想知道如何检测命名空间,以便我可以选择更改它或自动检测并设置命名空间。谢谢!

【问题讨论】:

【参考方案1】:

您可以在命令行中使用自己的参数指定。

我从示例库https://github.com/dotnet/dotnet-template-samples/tree/master/02-add-parameters得到这个


    "$schema": "http://json.schemastore.org/template",
    "author": "name",
    "classifications": [ "core", "console", "class" ],
    "tags": 
      "language": "C#",
      "type": "item"
    ,
    "identity": "Template.ClassTemplate",
    "name": "Editable Class Template",
    "shortName": "class",
    "sourceName": "Class1",

    
    "symbols": 
      "namespace": 
          "type": "parameter",
          "defaultValue": "MyNamespace",
          "replaces": "MY_NAMESPACE"
      
    

它将替换您源中的值

using System;

namespace MY_NAMESPACE
    
    public class Class1
                
    

用法:

dotnet new class -n class_name --namespace Foo

【讨论】:

这也是我的工作,它正在工作,但我想让它自动检测,就像在 Visual Studio 模板中有一个名为 $rootnamespace$ 的变量一样,它为当前项目

以上是关于通过dotnet cli中的自定义模板创建类时如何检测命名空间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Entity Framework Core cli 工具中使用来自 dotnet 6 最小 API 的配置

如何使用 dotnet cli 命令以 VB.NET 语言创建 ASP.NET Core 项目?

Web api dotnet core 中的 Api 版本控制错误的自定义错误响应

如何通过我的自定义开发/生产服务器利用 vue cli 服务功能?

如何从 keycloak 中的自定义客户端获取角色?

如何从模板中的自定义帖子类型中仅提取一个类别?