如何创建含外部共享项目的多项目Dotnet CLI模板?
问题解答
需求可行性
不可行。Dotnet CLI模板系统的核心约束是:所有属于模板的文件必须位于模板根目录(或其子目录)内,不允许引用模板目录外的文件路径,这就是你遇到[Error][MV012]错误的直接原因。
调整方案(按场景选择)
方案1:符号链接复用共享文件(适合非类库的共享模板资源)
通过操作系统的符号链接(软链接),在每个模板目录中创建指向共享项目的链接,既保持共享项目只存一份,又满足模板系统的路径要求。
- 调整文件夹结构:
Templates/ ├── Shared/ │ ├── SharedProject1/ │ └── SharedProject2/ ├── Template1/ │ ├── .template.config/ │ ├── SharedProject1 -> ../Shared/SharedProject1 │ └── SharedProject2 -> ../Shared/SharedProject2 └── Template2/ ├── .template.config/ ├── SharedProject1 -> ../Shared/SharedProject1 └── SharedProject2 -> ../Shared/SharedProject2 - 创建符号链接的命令:
- Windows(需管理员权限):
mklink /D Templates\Template1\SharedProject1 Templates\Shared\SharedProject1 mklink /D Templates\Template1\SharedProject2 Templates\Shared\SharedProject2 - Linux/macOS:
ln -s ../Shared/SharedProject1 Templates/Template1/SharedProject1 ln -s ../Shared/SharedProject2 Templates/Template1/SharedProject2
- Windows(需管理员权限):
- 安装模板时,系统会自动解析符号链接,将共享项目的内容纳入模板,无需重复复制文件。
方案2:独立共享模板+模板依赖(适合可独立复用的项目模块)
把共享项目打包成独立的Dotnet模板,让Template1和Template2通过模板依赖机制自动引用它。
- 为SharedProject1、2创建独立模板:
- 在
Shared目录下添加.template.config/template.json,配置为可安装的模板 - 执行
dotnet new install ./Shared/ --force安装共享模板
- 在
- 在Template1和Template2的
template.json中添加依赖配置:"dependencies": { "SharedTemplates": { "type": "template", "version": "[1.0.0, 2.0.0)" } } - 当用户安装或使用Template1/Template2时,系统会自动确保共享模板已安装,并将其内容整合到生成的项目中。
方案3:NuGet包复用(适合类库型共享项目)
如果SharedProject是可编译的类库,直接打包成NuGet包,在Template1和Template2的项目文件中通过NuGet引用,彻底避免文件复制。
- 将SharedProject1、2打包为NuGet包(可推送到私有源或本地源)
- 在Template1/Template2的项目文件(如
.csproj)中添加包引用:<ItemGroup> <PackageReference Include="SharedProject1" Version="1.0.0" /> <PackageReference Include="SharedProject2" Version="1.0.0" /> </ItemGroup> - 模板生成项目时,会自动通过NuGet还原共享类库,实现代码复用。
内容的提问来源于stack exchange,提问作者Papapinguy
相关产品推荐
相关产品推荐

