如何使用dotnet pack创建仅含MSBuild .targets文件的NuGet包?
制作仅含MSBuild目标文件的NuGet包(使用
dotnet pack) 完全可以用dotnet pack实现,不需要依赖C#类库项目,推荐使用Microsoft.Build.NoTargets SDK,它专门用于构建不需要编译输出的项目,完美适配你的需求:
- 创建一个SDK风格的项目文件(比如命名为
CustomBuildTargets.csproj),内容如下:
<Project Sdk="Microsoft.Build.NoTargets/3.7.0"> <PropertyGroup> <PackageId>Your.Custom.Build.Targets</PackageId> <Version>1.0.0</Version> <Authors>你的名字</Authors> <Description>仅包含自定义MSBuild目标文件的NuGet包</Description> <PackageTags>MSBuild;Targets</PackageTags> <!-- 禁用编译输出打包,避免多余内容 --> <IncludeBuildOutput>false</IncludeBuildOutput> <!-- 可选:指定包的输出目录 --> <!-- <PackageOutputPath>../nupkgs</PackageOutputPath> --> </PropertyGroup> <ItemGroup> <!-- 将targets文件打包到NuGet约定的build目录,安装后MSBuild会自动导入 --> <None Include="build\**\*.targets" Pack="true" PackagePath="build\" /> <!-- 若有props文件,可按同样方式添加 --> <!-- <None Include="build\**\*.props" Pack="true" PackagePath="build\" /> --> </ItemGroup> </Project>
构建目录结构
在项目根目录下创建build文件夹,把你的自定义.targets文件(比如MyCustom.targets)放入其中。生成NuGet包
在项目目录下执行命令:
dotnet pack -c Release
生成的.nupkg文件会默认输出到bin/Release目录下。
关键说明
Microsoft.Build.NoTargetsSDK会跳过所有编译、资源处理等C#项目的构建步骤,完全没有额外开销;- NuGet的
build目录是约定的MSBuild文件存放位置,安装包后,引用该包的项目会自动导入此目录下的.targets和.props文件; - 所有包的元数据(ID、版本、描述等)都直接在项目文件中配置,不需要单独维护
.nuspec文件,完全适配dotnet pack的工作流。
内容的提问来源于stack exchange,提问作者laalkep
相关产品推荐
相关产品推荐

