7

dotnet コア用のカスタム コード ジェネレーターを作成しようとしていますが、ドキュメントが限られているため、これまでのところほとんど成功していません。

CodeGeneration ソース コードを少し調べて、コマンド ラインからジェネレーターをトリガーする方法と、それが内部でどのように機能するかを見つけました。

dotnet コア内で利用可能なジェネレーターは私のニーズを満たしていないので、独自の CodeGenerator を作成しようとしましたが、「dotnet aspnet-codegenerator」コマンドで呼び出すことができないようです。以下は私のカスタム コード ジェネレーターです (現在、実装はありません。私の目標は、dotnet cli からこれをトリガーして例外を発生させることです)。

namespace TestWebApp.CodeGenerator
{
    [Alias("test")]
    public class TestCodeGenerator : ICodeGenerator
    {
        public async Task GenerateCode(TestCodeGeneratorModel model)
        {
            await Task.CompletedTask;

            throw new NotImplementedException();
        }
    }

    public class TestCodeGeneratorModel
    {
        [Option(Name = "controllerName", ShortName = "name", Description = "Name of the controller")]
        public string ControllerName { get; set; }

        [Option(Name = "readWriteActions", ShortName = "actions", Description = "Specify this switch to generate Controller with read/write actions when a Model class is not used")]
        public bool GenerateReadWriteActions { get; set; }
    }
}

以下は、コードジェネレーターを呼び出そうとしている方法です。

dotnet aspnet-codegenerator -p . TestCodeGenerator TestController -m TestWebApp.Models.TestModel

また

dotnet aspnet-codegenerator -p . test TestController -m TestWebApp.Models.TestModel

ただし、これは機能していないようで、カスタム コード ジェネレーターを見つけることができないと不平を言っています。以下のエラーメッセージを参照してください。

Finding the generator 'TestCodeGenerator'...
No code generators found with the name 'TestCodeGenerator'
   at Microsoft.VisualStudio.Web.CodeGeneration.CodeGeneratorsLocator.GetCodeGenerator(String codeGeneratorName)
   at Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand.Execute(String[] args)
RunTime 00:00:06.23

不足しているものは何ですか? または、CogeGenerator がカスタム クラスを取得するには、どのような変更を行う必要がありますか?

再現: Github

4

1 に答える 1