如何使NuGet中的.liquid模板以非链接形式在Visual Studio项目中可用?
自定义Unchase NSwag模板的NuGet打包方案
1. 项目结构与.csproj配置
在模板类库项目根目录创建Templates/NJsonSchema文件夹,存放所有自定义.liquid模板。修改项目的.csproj文件,添加以下配置:
<ItemGroup> <!-- 标记模板文件,不复制到输出目录 --> <Content Include="Templates\NJsonSchema\*.liquid" CopyToOutputDirectory="Never" PackageCopyToOutput="false" IncludeInPackage="true"> <!-- 打包时将文件放入content目录,供后续build目标复制 --> <PackagePath>content/Templates/NJsonSchema/</PackagePath> </Content> </ItemGroup> <PropertyGroup> <!-- 启用自动打包 --> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> <IncludeContentInPack>true</IncludeContentInPack> </PropertyGroup>
2. 添加Build目标实现模板复制
在项目根目录创建build文件夹,分别添加两个文件:
YourPackageName.props
<Project> <PropertyGroup> <!-- 定义模板在消费项目中的目标路径 --> <UnchaseTemplatesDir>$(MSBuildProjectDirectory)/Templates/NJsonSchema</UnchaseTemplatesDir> </PropertyGroup> <ItemGroup> <!-- 引用NuGet包内的模板文件 --> <UnchaseTemplateFiles Include="$(NuGetPackageRoot)/yourpackagename/$(PackageVersion)/content/Templates/NJsonSchema/*.liquid" /> </ItemGroup> </Project>
YourPackageName.targets
<Project> <!-- 首次安装时复制模板到项目目录,避免重复复制 --> <Target Name="CopyUnchaseTemplates" BeforeTargets="BeforeBuild" Condition="!Exists('$(UnchaseTemplatesDir)')"> <MakeDir Directories="$(UnchaseTemplatesDir)" /> <Copy SourceFiles="@(UnchaseTemplateFiles)" DestinationFolder="$(UnchaseTemplatesDir)" /> </Target> <!-- 标记模板为非输出内容 --> <ItemGroup> <Content Remove="$(UnchaseTemplatesDir)/**/*.liquid" /> <None Include="$(UnchaseTemplatesDir)/**/*.liquid" CopyToOutputDirectory="Never" /> </ItemGroup> </Project>
3. 手动打包配置(可选)
如果不用自动生成nuspec,手动编写YourPackageName.nuspec:
<package> <metadata> <id>Your.Internal.Templates.Unchase</id> <version>1.0.0</version> <authors>Your Team</authors> <description>自定义NJsonSchema模板,供Unchase NSwag代码生成使用</description> <dependencies> <group targetFramework="net48" /> <group targetFramework="net8.0" /> </dependencies> </metadata> <files> <file src="Templates\NJsonSchema\*.liquid" target="content/Templates/NJsonSchema" /> <file src="build\*.props" target="build" /> <file src="build\*.targets" target="build" /> </files> </package>
4. 消费项目配置
- 安装自定义NuGet包,执行命令:
Install-Package Your.Internal.Templates.Unchase
或通过NuGet包管理器安装。
- 修改Unchase的
ConnectedService.json,指定模板目录为项目相对路径:
{ "providerId": "Unchase.OpenAPI.ConnectedService", "version": "1.0.0", "extendedData": { "TemplateDirectory": "Templates/NJsonSchema", // 其他代码生成配置... } }
注意事项
- 包更新后,需在消费项目执行
Update-Package Your.Internal.Templates.Unchase -Reinstall,确保模板同步更新 - 若需强制更新模板,可修改
CopyUnchaseTemplates目标的条件,比如检查模板文件的版本或哈希值
内容的提问来源于stack exchange,提问作者asontu
相关产品推荐
相关产品推荐

