c# - 项目生成一个nuget包,该包依赖于另一个不创建nuget包的项目
问题描述
如果我有一个构建 nuget 包的项目 (P1),并且我让它依赖于一个不构建 nuget 包的项目 (P2),则生成的包仍将 P2 引用为 nuget 包。
重现步骤
- 使用 2 个 C# 项目(P1 和 P2)创建解决方案
- 使 P1 依赖于 P2。
将以下行添加到 P1.csproj(使其构建 nuget 包)
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
- 构建解决方案
- 在例如NuGet 包资源管理器中打开生成的 P1.nupkg
请注意,NuGet 包依赖于另一个名为 P2 的 NuGet 包。但是,那个包不存在,也永远不会存在,因为我没有告诉 P2 项目构建一个 nuget 包。
问题
如何强制 P2.dll 包含在 P1.nupkg 的lib
文件夹中?理想情况下,它只会强制它自己不创建 nuget 包的引用。
其他问题
- 将 .NET Standard 库打包为 Nuget 包并包含所有项目依赖项/引用是相关的,但假定使用
nuget pack
. 我正在使用dotnet build
或 Visual Studio 来构建 nuget 包,因此不适用。 - 这个 GitHub 查询与我的问题几乎相同。
解决方案
一种解决方法是将您不想包含的任何资产标记为<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>
推荐阅读
- kubernetes - 当没有更多容量时,rook-ceph 也提供 PV
- scala - Akka 远程动脉 SSL 配置
- mongodb - 如何将字段值用作聚合管道阶段 $lookup 的本地字段匹配的一部分
- react-native - 有没有一种更简单的方法可以将键应用于索引,而无需为 pebble 提要创建单独的组件?
- scala - Spark 在读取 CSV 作为数据框时用 NULL 替换一些行
- c# - Dotnet WebApi - 托管 Azure 应用服务中的上传错误(大文件)
- c++ - 从 HWND 读取 MFC 消息的最简单方法?
- solr - 分面显示在搜索页面上,但不在 Hybris 中的类别页面上
- reactjs - 使用 Route 注销时渲染不同组件时无法更新组件
- git - 如何从先前完成的拉取请求中重新应用更改?