我正在尝试从命令行运行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/