如何使用dotnet命令创建nuget元包



我有一个包含一堆项目的解决方案:

ProjectA.csproj
ProjectB.csproj
ProjectC.csproj

这些都是单独包装的nuget包:

dotnet pack ProjectA.csproj --version-suffix 1.0.0    ===> ProjectA-1.0.0.nupkg
dotnet pack ProjectB.csproj --version-suffix 1.0.0    ===> ProjectB-1.0.0.nupkg
dotnet pack ProjectC.csproj --version-suffix 1.0.0    ===> ProjectC-1.0.0.nupkg

版本号由我们的构建服务器使用gitversion.exe 自动提取

现在我想制作一个nuget元包,它自动引用所有三个nupkg

我可以用nuspec文件来做这件事,但当我们的版本号发生变化时,我需要手动编辑它。

我可以制作第四个项目ProjectAll.csproj,它引用了其他三个项目。但这会在使用这些包的应用程序的输出中留下一个空的DLL。

最好的方法是什么?

我不知道这是否是一个"秘密",但对于大多数命令来说,dotnet CLI只是msbuild的包装器。这包括pack,这意味着NuGet关于MSBuild pack目标的文档是相关的。如果你向下滚动查看每个标题,或者简单地搜索单词"构建输出",你会发现输出程序集部分。上面写着:

IncludeBuildOutput:一个布尔值,用于确定生成输出程序集是否应包含在包中。

所以,在你的项目文件中,你可以有这样的东西:

<Project Sdk="whatever. I can't be bothered looking it up and I haven't memorized it.">
<PropertyGroup>
<TargetFramework>same as your other projects. Most restrictive TFM if different projects have different TFMs</TargetFramework>
<IncludeBuildOutput>false</IncludeBuildOutput>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..pathtoProjectA.csproj" />
<ProjectReference Include="..pathtoProjectB.csproj" />
<ProjectReference Include="..pathtoProjectC.csproj" />
<ItemGroup>
</Project>

最新更新