как определить пространство имен при создании класса с помощью пользовательского шаблона в dotnet cli

#c# #.net #visual-studio #dotnet-cli #dotnet-new

#c# #.net #visual-studio #dotnet-cli #dotnet-новый

Вопрос:

Я создаю новый шаблон пользовательского класса dotnet, а ниже приведен мой template.json. Это работает, но я не могу понять, как определить текущее пространство имен и заменить его.

template.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:

Вы можете указать в командной строке свой собственный параметр.

Я получил это из репозитория samples 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
 

Комментарии:

1. Так что это тоже была моя работа, и она работает, но я бы хотел, чтобы она обнаруживалась автоматически, например, как в шаблонах Visual Studio вызывается переменная $rootnamespace$ , которая выбирает пространство имен для текущего проекта