DotNetCliToolReference

DotNetCliToolReference

我正在尝试从命令行运行dotnet aspnet-codegenerator。第一次尝试,出现错误No executable found matching command "dotnet-aspnet-codegenerator"

我意识到我需要将aspnet-codegenerator安装为“ dotnet CLI工具”(如果我在csproj文件中包含正确的<DotNetCliToolReference>元素,它们的extensibility model的一部分允许添加CLI命令。)1

This answer告诉我我需要哪个<DotNetCliToolReference>,即<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />,但这给我留下了几个问题:


我可以使用命令行而不是手动编辑来安装它吗
csproj?


我注意到我可以使用命令dotnet addpackage安装软件包,但这会添加元素<PackageReference>,我需要<DotNetCliToolReference>
即运行命令将产生以下(错误)元素:<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />

这两个元素有什么区别?


我可以将它们添加到相同的<ItemGroup>吗?
当我有一个csproj且其第一个也是唯一的<ItemGroup>包含一个<DotNetCliToolReference>时,随后的所有dotnet add package命令都会失败:error: Invalid restore input. Invalid restore input. DotnetCliToolReference-BundlerMinifier.Core Input files:
我的解决方法是:


删除任何现有的DotNetCliToolReference元素
运行dotnet add package
完成后,添加回我删除的内容。




1(我使用的是Visual Studio Code,并且使用的是最新版本;因此,我们使用的是csproj,而不是project.json)

最佳答案

目前只能通过手动编辑csproj文件来添加DotNetCliToolReference项目,在https://github.com/NuGet/Home/issues/4901处有对CLI命令的功能请求
逻辑上的区别是PackageReference将成为您应用程序的一部分-您可以从代码中使用软件包随附的dll,并且将随应用程序一起部署。 DotNetCliToolReference程序包将从提要中还原,但不会添加到应用程序的“依赖关系图”中。 CLI运行命令时,它还会查看csproj文件,并通过DotNetCliToolReference项将命令名称解析为相应的dll文件。
这两个项目类型属于哪个项目组无关紧要。 MSBuild非常动态,您可以根据需要重新排列文件。 CLI和NuGet均使用MSBuild API评估文件并查询项目的项目。
当已经存在dotnet add package时,您看到的DotNetCliToolReference失败错误是针对即将发布的2.0版本已修复的错误:https://github.com/NuGet/Home/issues/4771

关于.net-core - dotnet核心PackageReference与DotNetCliToolReference,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44169037/

10-13 02:06