This is more of a note to myself post, but last week I had the need to create a metapackage (a package without any contents, one that just references other packages). It was a really long time ago since I did that 👴Like in the pre
dotnet CLI age, where you manually created the
.nuspec files. Can't be that hard, now, right? Nope. But there were issues.
The Goal is to, for an empty project (apart from references), be able to just run
dotnet pack and get a NuPkg created, without any issues.
But basically, doing e.g
dotnet new classlib -n Labs.MyMetapackage dotnet add Labs.MyMetapackage/ \ package Microsoft.Extensions.Configuration.EnvironmentVariables rm Labs.MyMetapackage/Class1.cs dotnet pack Labs.MyMetapackage/ \ -c Release \ -o dist
Looks promising, right? Lets look at the package
☹️That's not what we wanted. Well, there's an easy fix. Use
IncludeBuildOutput and (depending on contents of package)
IncludeContentInPack and set them to
false. Either via
.csproj or via command line switches (more info here).
dotnet pack Labs.MyMetapackage/ \ -c Release \ -o dist \ -p:IncludeBuildOutput=false \ -p:IncludeContentInPack=false
☹️Meh! As I usually make use of
TreatWarningsAsErrors:true in build pipelines, this would be no fun, even though the package looks OK
Fear not 🙂 we could just silence the warning using
NU5128 (more info) or using
NoPackageAnalysis (more info).
Success! 🥳Nothing "new", more or less just note for myself. But if it helped you, then that's just a bonus.