我正在尝试为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为我的自定义课程做些什么改变?
Repro:Github
答案 0 :(得分:3)
确定。找出我的代码中缺少的内容。
几乎所有内容都是正确的,除了自定义代码生成器不能与Web项目驻留在同一个程序集中,并且应该从Web项目中引用自定义代码生成器作为包引用(项目引用赢得'工作)。
以下是自定义代码生成器对于dotnet cli代码生成器可见的要求
Microsoft.VisualStudio.Web.CodeGeneration
作为依赖dotnet pack -o ../custompackages
(确保将此位置(../custompackages)添加到nuget.config)
注意:我的问题中的代码有一个不接受Model参数(-m开关)的模型,并且需要一个controllerName参数,因此,要调用你需要的代码生成器使用,
dotnet aspnet-codegenerator -p . test --controllerName TestController
OR
dotnet aspnet-codegenerator -p . TestCodeGenerator --controllerName TestController
参考相关讨论here