【发布时间】:2021-04-02 05:23:36
【问题描述】:
我正在使用dotnet pack 命令为以下场景创建 NuGet 包:
项目结构:
Project B
|----> Project A
Project A
|----> SomePackage
我想创建一个 NuGet 包,其中包含 ProjectB.dll、ProjectA.dll 和 SomePackage 作为 NuGet 包依赖项。
为了将ProjectA.dll 作为NuGet 包的一部分(而不是包依赖项),我使用了建议here 的以下解决方案。
在ProjectB.csproj:
<ProjectReference Include="ProjectA.csproj" PrivateAssets="all"/>
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="BuildOnlySettings;ResolveReferences">
<ItemGroup>
<!-- Filter out unnecessary files -->
<_ReferenceCopyLocalPaths Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'All'))"/>
</ItemGroup>
<!-- Print batches for debug purposes -->
<Message Text="Batch for .nupkg: ReferenceCopyLocalPaths = @(_ReferenceCopyLocalPaths), ReferenceCopyLocalPaths.DestinationSubDirectory = %(_ReferenceCopyLocalPaths.DestinationSubDirectory) Filename = %(_ReferenceCopyLocalPaths.Filename) Extension = %(_ReferenceCopyLocalPaths.Extension)" Importance="High" Condition="'@(_ReferenceCopyLocalPaths)' != ''" />
<ItemGroup>
<!-- Add file to package with consideration of sub folder. If empty, the root folder is chosen. -->
<BuildOutputInPackage Include="@(_ReferenceCopyLocalPaths)" TargetPath="%(_ReferenceCopyLocalPaths.DestinationSubDirectory)"/>
</ItemGroup>
</Target>
问题:
当我运行 dotnet pack ProjectB.csproj 时,我得到一个包含 ProjectA.dll 和 Project B.dll 的包,但 不依赖于 SomePackage。
问题:
如何将依赖关系添加到SomePackage 到ProjectB NuGet 包?
可能的解决方案:
- 手动将包引用从 ProjectB 添加到
SomePackage。 - 创建
ProjectB.nuspec文件并手动将依赖添加到SomePakcage。
两种方法的缺点:我需要为ProjectA 使用的每个 NuGet 包添加依赖项,这很容易忘记和破坏。
【问题讨论】:
标签: visual-studio .net-core nuget nuget-package dotnet-cli