我如何在单个NuGet软件包中提供多个`dotnet new`模板?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何在单个NuGet软件包中提供多个`dotnet new`模板?相关的知识,希望对你有一定的参考价值。

我有一个由三个模板组成的dotnet new模板项目:

  • 图书馆
  • Headless .NET Core服务
  • ASP.NET Core Web应用程序

项目源可以在这里找到(它是自由开源):https://github.com/petabridge/petabridge-dotnet-new/

我遵循此处https://docs.microsoft.com/en-us/dotnet/core/tools/custom-templates概述的最佳实践,并创建了针对所有三个模板的.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <PackageType>Template</PackageType>
    <PackageVersion>1.0</PackageVersion>
    <PackageId>Petabridge.Templates</PackageId>
    <Title>Petabridge.Templates</Title>
    <Authors>Petabridge</Authors>
    <Description>Professional .NET Core templates complete with CI, Docs, and more. Supports library, Akka.NET, and ASP.NET Core application types.</Description>
    <PackageTags>dotnet-new;templates;petabridge;akka;</PackageTags>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageReleaseNotes></PackageReleaseNotes>
    <IncludeContentInPack>true</IncludeContentInPack>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <ContentTargetFolders>content</ContentTargetFolders>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="templates***" Exclude="templates**in**;templates**obj**" />
    <Compile Remove="***" />
  </ItemGroup>

</Project>

此源的实时版本可以在这里找到:https://github.com/petabridge/petabridge-dotnet-new/blob/dev/src/Petabridge.Templates.csproj

运行构建脚本并检查软件包输出后,我可以看到作为软件包输出的一部分构建的NuGet软件包肯定包含其中的所有三个模板-您可以从Github下载该软件包的签名版本在此存储库上发布:https://github.com/petabridge/petabridge-dotnet-new/releases/tag/1.0.1

我的问题是,当我使用最新的.NET Core 3.0 SDK将这些模板安装到计算机上时,我只看到第三个模板(Web应用程序)显示在安装列表中:

PS> dotnet new -i "Petabridge.Templates::*"

enter image description here

我做错了什么?为什么安装此软件包时只显示一个模板?通过单击我包含的存储库链接,可以找到所有相关的源代码,模板配置等。

答案

我有同样的问题。我通过在每个模板的template.json文件中为groupIdentity提供不同的值来解决它。

以上是关于我如何在单个NuGet软件包中提供多个`dotnet new`模板?的主要内容,如果未能解决你的问题,请参考以下文章

Nuget:将多个大型解决方案迁移到PackageReference

如何托管我自己的nuget v3 Feed?

NuGet包尝试在所有已配置的NuGet源中检索

使用 baget 搭建 nuget 私有服务

单个目录指向多个git存储库

如何使用单个范围提供来提供多个范围描述