You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为含独立.template.config的.NET 8多项目解决方案创建NuGet模板

构建.NET 8解决方案级NuGet模板:整合已有项目模板的方法

核心结构搭建

首先在你的解决方案根目录下创建两个关键内容:.template.config目录(内含template.json),以及一个用于NuGet打包的.csproj文件。最终目录结构应该类似这样:

MySolutionTemplate/
├── .template.config/
│   └── template.json
├── MySolutionTemplate.csproj
├── Project1/          # 你已有的带单独模板的项目
│   ├── .template.config/
│   │   └── template.json
│   └── ...(项目文件)
├── Project2/
│   ├── .template.config/
│   │   └── template.json
│   └── ...
└── ...(剩下3个项目)

解决方案级template.json配置

这个文件是整合的核心,重点用sources字段关联你已有的项目模板,无需重复编写每个项目的专属配置。示例配置如下:

{
  "$schema": "http://json.schemastore.org/template",
  "author": "你的名字/团队",
  "name": ".NET 8 完整解决方案模板",
  "shortName": "net8solntemplate",
  "tags": { "language": "C#", "type": "Solution", "platform": "NET8" },
  "type": "Solution",
  "sources": [
    { "source": "./Project1", "description": "项目1:业务逻辑层" },
    { "source": "./Project2", "description": "项目2:数据访问层" },
    { "source": "./Project3", "description": "项目3:API接口层" },
    { "source": "./Project4", "description": "项目4:单元测试" },
    { "source": "./Project5", "description": "项目5:集成测试" }
  ],
  "symbols": {
    // 定义全局共享符号,所有项目模板可复用
    "SolutionName": {
      "type": "parameter",
      "description": "解决方案名称",
      "defaultValue": "MyEnterpriseSolution",
      "replaces": "__SolutionName__",
      "fileRename": "__SolutionName__"
    },
    "RootNamespace": {
      "type": "parameter",
      "description": "所有项目的根命名空间",
      "defaultValue": "MyCompany.MySolution",
      "replaces": "__RootNamespace__"
    }
  }
}
  • sources字段会自动读取每个项目下的.template.config/template.json,继承它们的符号、文件替换规则、参数等,完全复用你已有的项目模板配置。
  • 若需要全局覆盖某个项目的符号(比如统一命名空间),直接在解决方案级的symbols里定义即可,优先级高于项目级配置。

打包用的.csproj配置

这个文件负责将整个解决方案模板打包成NuGet包,配置示例:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <PackageType>Template</PackageType>
    <PackageVersion>1.0.0</PackageVersion>
    <PackageId>MyCompany.Net8SolutionTemplate</PackageId>
    <Title>.NET 8 全栈解决方案模板</Title>
    <Authors>你的名字/团队</Authors>
    <Description>包含5个预配置项目的.NET 8解决方案模板,涵盖业务逻辑、数据访问、API及测试层</Description>
    <PackageTags>dotnet-template;solution;net8;csharp;enterprise</PackageTags>
    <TargetFramework>net8.0</TargetFramework>
    <IncludeContentInPack>true</IncludeContentInPack>
    <ContentTargetFolders>content</ContentTargetFolders>
  </PropertyGroup>

  <ItemGroup>
    <!-- 包含所有项目文件,排除编译输出和临时文件 -->
    <Content Include="**/*" Exclude="bin/**;obj/**;**/*.user;**/*.suo;**/*.csproj.nuget.dgspec.json" />
    <!-- 确保模板配置文件被正确打包 -->
    <Content Include=".template.config/**/*" />
  </ItemGroup>
</Project>

测试与打包

  1. 本地测试模板:在解决方案根目录运行dotnet new install .,然后用dotnet new net8solntemplate -n MyNewSolution生成新解决方案,检查所有项目是否正确生成、符号替换是否生效。
  2. 打包NuGet包:运行dotnet pack,生成的.nupkg文件可发布到NuGet服务器,或直接在本地通过dotnet new install ./MyCompany.Net8SolutionTemplate.1.0.0.nupkg安装使用。

关键注意事项

  • 项目级的.template.json无需修改,解决方案级模板会自动继承它们的配置(比如项目专属的符号、文件过滤规则)。
  • 如果某个项目需要独立的参数,依然可以在自己的.template.json里定义,不会被解决方案级配置覆盖。
  • 若要调整解决方案生成时的项目结构,可在解决方案级template.json里添加postActions字段(比如自动添加项目到解决方案)。

内容的提问来源于stack exchange,提问作者Mike Lenart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:32:52