繁体   English   中英

Project生成一个nuget包,该包依赖于另一个不创建nuget包的项目

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

如果我有一个构建nuget程序包的项目(P1),并且使它依赖于没有构建nuget程序包的项目(P2),则生成的程序包仍将P2 称为nuget程序包

重现步骤

  • 使用2个C#项目(P1和P2)创建解决方案
  • 使P1依赖于P2。
  • 将以下行添加到P1.csproj(以使其构建nuget包)

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

  • 建立解决方案
  • 在例如NuGet Package Explorer中打开生成的P1.nupkg

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

如何强制P2.dll包含在P1.nupkg的lib文件夹中? 理想情况下,它将仅对本身不会创建nuget包的引用强制使用它。

其他问题

一种解决方法是将您不想包含的所有资产标记为<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>

如果我正确理解,那么引用的项目程序集不会包含在nuget包中。

您可以使用以下命令在生成nuget软件包时尝试以下命令:

nuget pack projectfile.csproj -IncludeReferencedProjects

这应该在nuget中包含P2.dll。 有关更多详细信息, 请参考此MSDN页面

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM