我有一个包含一堆项目的解决方案:
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>