在 mac 中未找到匹配命令 "dotnet-aspnet-codegenerator" asp.net 核心 2.1 项目的可执行文件

No executable found matching command "dotnet-aspnet-codegenerator" asp.net core 2.1 project in mac

我正在学习 https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages-mac/model?view=aspnetcore-2.1 中关于在 mac 中创建 asp.net 核心 2.1 项目的教程。尝试构建模型时出现错误:

No executable found matching command "dotnet-aspnet-codegenerator"

不同网站上的大多数解决方案都建议对 Microsoft.VisualStudio.Web.CodeGeneration.Tools 使用 DotNetCliToolReference,但没有帮助。但是,提到可以在 asp.net core 2.1 https://docs.microsoft.com/en-us/aspnet/core/migration/20_21?view=aspnetcore-2.1 中删除所有 DotNetCliToolReference。我什至尝试为版本 2.1.0-preview1-final(最新版​​本)和 2.0.4 添加 Microsoft.VisualStudio.Web.CodeGeneration.Tools 的 DotNetCliToolReference,但它导致了另一个错误:

Version for package Microsoft.VisualStudio.Web.CodeGeneration.Tools could not be resolved.

我错过了什么?如何解决这个问题?

我正在使用的包参考:

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.1.0-preview1-final" />
</ItemGroup>

在浏览了各种网站并在高级开发人员的帮助下,我终于解决了这个问题。我发现用于模型脚手架的代码生成工具在 2.1 版本中成为了一个全局的 .NET Core CLI 工具。因此,与其仅仅添加包引用,还不如全局安装。有关详细信息,请参阅 https://github.com/aspnet/Docs/issues/6894。全局安装代码生成工具的命令为:

dotnet tool install --global dotnet-aspnet-codegenerator

它将安装最新版本的代码生成工具。

在这里,我在框架.net 核心上使用 2.1.4。 所以,我需要工具 dotnet-aspnet-codegenerator 的 2.1。

第一个假设 我决定指定我的项目的 .net 框架,并创建一个 global.json 文件: dotnet new globaljson --sdk-version 2.1.401

它没有达到我想要的效果:结果与您发现的相同。

选择合适的安装程序版本 所以我决定:

  • 删除 .store 目录中第一个安装的可执行文件
  • 安装 2.1 版本的工具:dotnet tool install --global dotnet-aspnet-codegenerator --version 2.1.0

而且是 运行! :)(当然是 2.1 版本)

正如兰吉普所说:

dotnet tool install --global dotnet-aspnet-codegenerator

在下一步中,您可能会遇到这样一个事实:当您尝试以下任何一种方法时,代码生成器 cmd 将不会列出其生成器:

dotnet aspnet-codegenerator -h
dotnet-aspnet-codegenerator -h

解决方案是同时命名您要处理的项目。即使您在包管理器控制台中工作并在下拉列表中选择了正确的项目,您也必须这样做。

这会起作用:

dotnet-aspnet-codegenerator -h -p "C:\Projects\MyProject.csproj"