找不到与命令“dotnet-aspnet-codegenerator”匹配的可执行文件”
Posted
技术标签:
【中文标题】找不到与命令“dotnet-aspnet-codegenerator”匹配的可执行文件”【英文标题】:No executables found matching command 'dotnet-aspnet-codegenerator'" 【发布时间】:2017-01-03 18:34:27 【问题描述】:当尝试使用带有 Update 3 的 Visual Studio 15 Enterprise 在 ASP.NET Core 项目中添加控制器时,我收到以下错误:
"The was an error running the selected code generator: No executables found matching command 'dotnet-aspnet-codegenerator'"
【问题讨论】:
【参考方案1】:如果您使用的是 csproj (Visual Studio 2017) 而不是 project.json,那么您需要将以下内容添加到您的 csproj 文件中:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
</ItemGroup>
【讨论】:
当前 - 版本="1.0.0" @CountZero ,我有`Version="1.0.1"`如何最好地检查最新版本号?我可以使用 dotnet cli 本身安装此参考吗?当我尝试dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Tools
时,它创建了一个<PackageReference>
,但我需要一个<DotNetCliToolReference>
,因为johnnycardy 在这里回答...dotnet add package
的一个优点是(看起来?)它会找到并添加一个最新的元素版本属性,所以我只是从<PackageReference>
手动转换 -> <DotNetCliToolReference>
看起来 1.0.1 是最新的,除非您使用的是预览版。 nuget.org/packages/…
如果这一行已经存在于 csproj 文件中并且我们仍然收到相同的错误怎么办?我在 VS 2017 中遇到了这个错误(截至日期安装的版本和最新更新)
@SteveJohnson 谢谢。大声笑我发现这是问题所在(现在一切都是 2.0.0),并通过使用 cmd 的 dos cmd 提示符解决了仍然找不到代码生成器的问题。此处为未来读者提供详细信息:***.com/questions/47765196/…【参考方案2】:
对于最新版本,在 project.json 的依赖项下添加以下内容:
"Microsoft.VisualStudio.Web.CodeGeneration.Tools":
"version": "1.1.0-preview4-final",
"type": "build"
,
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc":
"type": "build",
"version": "1.1.0-preview4-final"
以及工具下的以下内容:
"Microsoft.VisualStudio.Web.CodeGeneration.Tools":
"version": "1.1.0-preview4-final",
"imports": [
"portable-net45+win8"
]
【讨论】:
最新的asp.net核心版本没有“project.json”文件。【参考方案3】:比将版本号复制到配置文件中更可靠的答案是使用 NuGet 来确保将包添加到您的项目中。
工具 -> NuGet 包管理器 -> 管理用于解决方案的 NuGet 包。
首先,更新所有内容。选择更新选项卡。选中全部更新复选框并运行几次。如果某些东西在您运行升级的前几次降级,请不要感到惊讶。某些依赖项似乎必须按顺序处理。我花了大约 5 次升级才能使所有内容都保持最新状态。
然后,在浏览选项卡中搜索CodeGeneration.Tools
。安装它。对CodeGenerators.Mvc
执行相同的操作。当您发现其他错误消息时,您应该能够在 NuGet 中找到任何丢失的包。
【讨论】:
这是我尝试将CodeGeneration.Tools
安装到我的项目时看到的:Package 'Microsoft.EntityFrameworkCore.Tools.DotNet 1.0.1' has a package type 'DotnetCliTool' that is not supported by project
【参考方案4】:
如果您使用的是 Mac (OS X) 或任何受支持的 Linux 发行版,则必须运行:
dotnet tool install --global dotnet-aspnet-codegenerator --version 2.2.3
此外,在 Mac 上,我添加到我的 .zshrc
(或 bash 等效项)
export PATH=$HOME/.dotnet/tools:$PATH
我必须确保重新启动终端。
【讨论】:
在 Mint 19 中将 .dotnet/tools 添加到我的 PATH 解决了我的问题。【参考方案5】:在 dotnet core 2.1.1 中,您预计情况已经改变,您可能不需要添加太多内容。很抱歉打扰您,但情况相同,您现在需要做的就是更新您希望使用的工具或软件包的版本。
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup>
这对我有用。我希望它适用于卡在这里的其他人。请注意,关键引用是DotNetCliToolReference
而不是PackageReference
【讨论】:
【参考方案6】:将以下内容添加到您的 project.json:
依赖项下:
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc":
"version": "1.0.0-preview2-final",
"type": "build"
在工具下:
"Microsoft.VisualStudio.Web.CodeGeneration.Tools":
"version": "1.0.0-preview2-final",
"imports": [
"portable-net45+win8"
]
版本号可能会根据您在项目中使用的 .NET Core 版本而有所不同
您可能会收到另一个关于缺少 Microsoft.DotNet.InternalAbstractions 的错误,在这种情况下,您需要从 NuGet 获取
确保依赖项中的“Microsoft.VisualStudio.Web.CodeGeneration.Tools”版本与工具中的“Microsoft.VisualStudio.Web.CodeGeneration.Tools”版本匹配
【讨论】:
感谢您发布您的解决方案并具体描述不同用户的版本号变化等。它为我节省了大量时间。【参考方案7】:-
我必须将以下内容添加到我的 CSProj 文件中:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0-msbuild3-final" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.0-msbuild3-final" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0-msbuild3-final" />
</ItemGroup>
添加后,我使用 nuget 包管理器安装了 CodeGenerators.Mvc。
我仍然收到一条错误消息,提示它在 MCD 文件夹中找不到某些文件,因此我不得不将整个 bin\Debug\netcoreapp1.1 文件夹复制并粘贴到 bin\MCD\Debug\netcoreapp1 中。 1
我跑了脚手架,它成功了!
【讨论】:
【参考方案8】:我在 Visual Studio Mac Community Edition 2017 中遇到了同样的问题。在从项目目录运行 scaffold
命令之前,请确保该目录具有 Program.cs
、Startup.cs
和 .csproj
文件。如果不是,则运行命令ls-al
,然后运行cd
进入当前项目目录中的项目目录,然后执行scaffold
命令。一个被许多人忽视的明显错误。
【讨论】:
这是我的解决方案(你说得对,非常明显!哈哈)。我正在使用 JetBrains Rider (它有一个解决方案和单独的项目子文件夹)并遵循没有的 vscode 说明。一旦我跳入项目文件夹而不是它工作的解决方案。 Rider 将其终端默认为解决方案。 :)【参考方案9】:只需在 .csproj 上添加标签“DotNetCliToolReference”并打包代码设计并在根解决方案上执行代码生成命令。这对我有用。
.csproj
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.3" />
</ItemGroup>
<ItemGroup>
...
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.3" />
</ItemGroup>
命令
PS C:\Users\miche\projetos\asp_net_core\crud> dotnet aspnet-codegenerator controller -name ProdutosController -m Produto -dc AppDataContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
添加包后不要忘记构建和恢复解决方案;)
【讨论】:
【参考方案10】:对于 VS 2015,在 project.json 文件中 -
在依赖项下添加 -
"Microsoft.VisualStudio.Web.CodeGeneration.Tools":
"version": "1.0.0-preview2-final",
"imports": [
"portable-net45+win8"
]
,
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": "1.0.0-preview2-final"
然后在工具下添加-
"Microsoft.VisualStudio.Web.CodeGeneration.Tools":
"version": "1.0.0-preview2-final",
"imports": [
"portable-net45+win8"
]
【讨论】:
【参考方案11】:在 Visual Studio Code 中更改 yourproject.csproj
<pre>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.4" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.6" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" version= "2.1.0-preview1-final" />
<PackageReference Include="Microsoft.Extensions.SecretManager.Tools" version= "2.0.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" version="2.1.0-preview1-final" />
</ItemGroup>`enter code here`
</pre>
【讨论】:
pre 标签不存在【参考方案12】:我刚刚在 Linux 中输入:
~/.dotnet/tools/dotnet-aspnet-codegenerator razorpage -m Movie -dc RazorPagesMovieContext -udl -outDir Pages/Movies --referenceScriptLibraries
所以,我没有从“dotnet”开始(我当前的版本:2.2.300)
我不喜欢这个解决方案,但它有效。
【讨论】:
【参考方案13】:在 Windows 10 上
在我的情况下,安装程序将错误的路径添加到 Path
环境变量。
添加的路径指向程序下不存在的文件夹。它需要指向dotnet-aspnet-codegenerator.exe
。
对我来说,正确的路径在我的用户文件夹中:~\.dotnet\tools
您可以通过运行检查是否添加了正确的路径:echo $env:Path
如果路径丢失或不正确,您只需将正确的路径添加到Path
系统环境变量即可。
您也许可以通过使用 PowerShell 设置本地变量来进行测试:$env:Path += ";C:\Users\<YOUR_NAME_HERE>\.dotnet\tools"
但我还没有尝试过。
全局修复
-
开始在 Windows 搜索中输入
Environment
,您应该会看到 Control panel
选项到 Edit system environment variables
。
点击右下角的Environment Variables...
按钮。
在System variables
下找到并选择Path
变量,然后单击Edit
。
检查dotnet-aspnet-codegenerator.exe
的路径是否存在,如果没有,请单击New
并添加它。
重新启动计算机。
【讨论】:
以上是关于找不到与命令“dotnet-aspnet-codegenerator”匹配的可执行文件”的主要内容,如果未能解决你的问题,请参考以下文章