aspnet-codegenerator无法执行

时间:2020-06-01 22:41:00

标签: c# asp.net-core asp.net-core-webapi

我正在阅读Microsoft文档中针对.Net Core 3.1 SDK的基本TodoList API教程。我已经在本教程中达到了这一点:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.1&tabs=visual-studio-code#scaffold-a-controller

全局安装aspnet-codegenerator工具后,确保它在正确的路径'User.dotnet \ tools'中,尝试使用旧版本,重新启动VScode和powershell,它仍然会出现以下错误:

“无法执行,因为找不到指定的命令或文件。 可能的原因包括: *您拼写了内置的dotnet命令。 *您打算执行.NET Core程序,但dotnet-aspnet-codegenerator不存在。 *您打算运行全局工具,但是不能使用具有该名称的dotnet前缀可执行文件 在PATH上找到。”

我正在尝试使用以下命令来搭建待办事项控制器: “ dotnet aspnet代码生成器控制器-名称TodoItemsController -async -api -m TodoItem -dc TodoContext -outDir控制器”

4 个答案:

答案 0 :(得分:0)

确保已将这些NuGet程序包添加到用作启动项目的项目中。

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.Design

答案 1 :(得分:0)

我正在使用VSCodes终端,但找不到该工具。当我在Windows计算机上使用cmd时,它可以工作。

答案 2 :(得分:0)

在与我类似的情况下,这可能会帮助一些人。我也遵循同样的教程,并在“将控制器脚手架”步骤卡住了。

由于某种原因,我发现我的NuGet包源仅在“ Microsoft Visual Studio脱机包”模式下配置。显然,这是Visual Studio完整版某些安装的默认(??)配置。

依次输入以下命令(遵循本教程中的VS Code步骤):

dotnet工具安装--global dotnet-aspnet-codegenerator

它失败并显示一条错误消息,因为此软件包的(本地)版本确实旧并且与 netcoreapp3.1 目标框架不兼容。

要解决此问题,...我打开了完整的Visual Studio IDE并导航至:

  • 工具-> NuGet程序包管理器->程序包管理器设置->程序包源
  • 添加了一个名为“ Nuget Online”的新条目,并将其指向以下来源:-https://api.nuget.org/v3/index.json

Picture of NuGet Package Manager Settings - Under Package Source Option

现在正确配置了NuGet,可以检查在线站点了……我在VS Code-Terminal窗口中重新执行了上述命令,并正确地提取了必要的软件包。我能够继续进行本教程中的后续步骤(包括TodoItemsController类的生成)。

答案 3 :(得分:0)

添加这个包对我有用。

dotnet tool install --global dotnet-aspnet-codegenerator --version 5.0.2

然后在 Visual Studio CodeIDE 中从 CLI 生成控制器,如下所示:

dotnet aspnet-codegenerator controller -name MoviesController -m Movie -dc MvcMovieContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries

还要检查以下在 public void ConfigureServices(IServiceCollection services) 中添加的内容:

services.AddDbContext<MvcMovieContext>(options =>
        options.UseSqlite(Configuration.GetConnectionString("MvcMovieContext")));