I'm using dotnet pack
command for creating a NuGet package for the following scenario:
The projects structure:
Project B
|----> Project A
Project A
|----> SomePackage
I want to create a single NuGet package the contains ProjectB.dll
, ProjectA.dll
, and SomePackage
as NuGet package dependency.
In order to include ProjectA.dll
as part of the NuGet package (and not package dependency), I used the following solution that suggests here.
In ProjectB.csproj
:
<ProjectReference Include="ProjectA.csproj" PrivateAssets="all"/>
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="BuildOnlySettings;ResolveReferences">
<ItemGroup>
<!-- Filter out unnecessary files -->
<_ReferenceCopyLocalPaths Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'All'))"/>
</ItemGroup>
<!-- Print batches for debug purposes -->
<Message Text="Batch for .nupkg: ReferenceCopyLocalPaths = @(_ReferenceCopyLocalPaths), ReferenceCopyLocalPaths.DestinationSubDirectory = %(_ReferenceCopyLocalPaths.DestinationSubDirectory) Filename = %(_ReferenceCopyLocalPaths.Filename) Extension = %(_ReferenceCopyLocalPaths.Extension)" Importance="High" Condition="'@(_ReferenceCopyLocalPaths)' != ''" />
<ItemGroup>
<!-- Add file to package with consideration of sub folder. If empty, the root folder is chosen. -->
<BuildOutputInPackage Include="@(_ReferenceCopyLocalPaths)" TargetPath="%(_ReferenceCopyLocalPaths.DestinationSubDirectory)"/>
</ItemGroup>
</Target>
The issue:
When I run dotnet pack ProjectB.csproj
I'm getting a single package the contains ProjectA.dll and Project B.dll, but without a dependency to SomePackage
.
The question:
How do I add the dependency to SomePackage
to ProjectB
NuGet package?
Possible solutions:
- Manually add a package reference from ProjectB to
SomePackage
. - Create
ProjectB.nuspec
file and manually add the dependency toSomePakcage
.
The disadvantage of the 2 approaches: I will need to add the dependency for every NuGet package that ProjectA
use, which is very easy to forget and breakable.