dotnet core PackageReference vs DotNetCliToolReference

Viewed 13501

I'm trying to run dotnet aspnet-codegenerator from my comand line. The first time I tried, I got the error No executable found matching command "dotnet-aspnet-codegenerator"

I realized I needed to install the aspnet-codegenerator as "dotnet CLI tool" (part of their extensibility model allows adding CLI commands if I include the correct <DotNetCliToolReference> element to the csproj file.)1

This answer tells me which <DotNetCliToolReference> I need, i.e. <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" /> but it leaves me with a few questions:

  1. Can I install that using the command line rather than hand-editing the csproj?
    • I notice I can install packages using the command dotnet add package, but that adds the element <PackageReference> and I need <DotNetCliToolReference> ;
    • i.e. running the command would produce this (wrong) element: <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
  2. What's the difference between those two elements?
    • Can I add them to the same <ItemGroup>?
    • When I have a csproj whose first and only <ItemGroup> contains a <DotNetCliToolReference>, then any subsequent dotnet add package commands fail: error: Invalid restore input. Invalid restore input. DotnetCliToolReference-BundlerMinifier.Core Input files:.
    • My workaround is to:
      1. remove any existing DotNetCliToolReference elements
      2. run dotnet add package
      3. After finished, add back what I removed.

1 (I'm in Visual Studio Code and using the latest; so we're using csproj, not project.json)

1 Answers
Related