RB.
RB.

Reputation: 37192

Project generates a nuget package that depends on another project that does not create a nuget package

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.

Steps to reproduce

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.

Question

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.

Other questions

Upvotes: 8

Views: 4285

Answers (2)

RB.
RB.

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

Manoj Choudhari
Manoj Choudhari

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

Related Questions