dotnet core PackageReference与DotNetCliToolReference

时间:2017-05-24 21:49:16

标签: .net-core

我试图从我的命令行运行dotnet aspnet-codegenerator。我第一次尝试时,收到错误No executable found matching command "dotnet-aspnet-codegenerator"

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

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

  1. 我可以使用命令行而不是手动编辑来安装它 csproj?
    • 我注意到我可以使用命令dotnet add package安装软件包,但是添加了元素<PackageReference>,我需要<DotNetCliToolReference>;
    • 即。运行该命令会产生这个(错误的)元素:<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
  2. 这两个要素之间的区别是什么?
    • 我可以将它们添加到同一个<ItemGroup>吗?
    • 如果我的csproj第一个且<ItemGroup>包含<DotNetCliToolReference>,则后续任何dotnet add package命令都会失败:error: Invalid restore input. Invalid restore input. DotnetCliToolReference-BundlerMinifier.Core Input files:
    • 我的解决方法是:
      1. 删除所有现有的DotNetCliToolReference元素
      2. 运行dotnet add package
      3. 完成后,添加我删除的内容。
  3. 1 (我在Visual Studio Code中使用最新的;所以我们使用csproj,而不是project.json)

1 个答案:

答案 0 :(得分:15)

  1. 目前只能通过手工编辑csproj文件添加DotNetCliToolReference项目,https://github.com/NuGet/Home/issues/4901

  2. 上有CLI命令的功能请求
  3. 逻辑上的不同之处在于PackageReference将成为您应用程序的一部分 - 您可以使用代码中附带的dll随附的dll,它将与您的应用程序一起部署。 DotNetCliToolReference个包将从Feed中恢复,但不会添加到您应用的“依赖关系图”中。当CLI运行命令时,它会查看csproj文件,并通过DotNetCliToolReference项将命令名解析为相应的dll文件。

  4. 这两个项目类型在哪个项目组中无关紧要。 MSBuild非常动态,您可以根据需要重新排列文件。 CLI和NuGet都使用MSBuild API来评估文件并查询项目的项目。

  5. dotnet add package已经存在时,您看到DotNetCliToolReference失败的错误是针对即将发布的2.0版本修复的错误:https://github.com/NuGet/Home/issues/4771