Reputation: 37192
If I have a project (P1) that builds a nuget package, and I make it depend on a project (P2) that doesn't build a nuget package, the generated package will still reference P2 as a nuget package.
Add the following line to P1.csproj (to make it build a nuget package)
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Note that the NuGet package depends on another NuGet package called P2. However, that package does not exist, and will never exist, as I have not told the P2 project to build a nuget package.
How do I force P2.dll to be included in P1.nupkg's lib
folder? Ideally it will force it only for references that don't create a nuget package themselves.
nuget pack
. I am using dotnet build
or Visual Studio to build the nuget package, so doesn't apply.Upvotes: 8
Views: 4285
Reputation: 37192
One workaround is to mark any assets you don't want to include as <PrivateAssets>all</PrivateAssets>
, and then include the below code in your project file.
See https://github.com/nuget/home/issues/3891#issuecomment-459848847 for more information
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj">
<PrivateAssets>all</PrivateAssets>
</ProjectReference>
</ItemGroup>
<!--
The following solves the problem that 'dotnet pack' does not include the DLLs from referenced projects.
See https://github.com/NuGet/Home/issues/3891 for a description of the problem
and for newer versions / workarounds / built-in methods.
-->
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
<!-- include PDBs in the NuGet package -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'all'))" />
</ItemGroup>
</Target>
Upvotes: 10
Reputation: 5624
If I understood correctly, the referenced project assemblies are not getting included in the nuget package.
You can try below command while generating nuget package by using below command:
nuget pack projectfile.csproj -IncludeReferencedProjects
This should include P2.dll in the nuget. Refer this MSDN page for more details.
Hope this helps.
Upvotes: 2