首页 > 解决方案 > 项目生成一个nuget包,该包依赖于另一个不创建nuget包的项目

问题描述

如果我有一个构建 nuget 包的项目 (P1),并且我让它依赖于一个不构建 nuget 包的项目 (P2),则生成的包仍将 P2 引用为 nuget 包

重现步骤

请注意,NuGet 包依赖于另一个名为 P2 的 NuGet 包。但是,那个包不存在,也永远不会存在,因为我没有告诉 P2 项目构建一个 nuget 包。

问题

如何强制 P2.dll 包含在 P1.nupkg 的lib文件夹中?理想情况下,它只会强制它自己不创建 nuget 包的引用。

其他问题

标签: c#msbuildnugetcsproj

解决方案


一种解决方法是将您不想包含的任何资产标记为<PrivateAssets>all</PrivateAssets>,然后在项目文件中包含以下代码。

有关更多信息,请参阅https://github.com/nuget/home/issues/3891#issuecomment-459848847

<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>

推荐阅读