在不导入PackageReference的情况下在MSBuild中表达传递依赖

时间:2018-05-20 16:05:31

标签: msbuild nuget csproj nuspec nuget-spec

我有一个项目MySdk.csproj,我在构建时通过dotnet pack打包。我想表达这个项目对Trans.nupkg的传递依赖,但我实际上并不想在构建MySdk.csproj期间从Trans.nupkg导入所有资产。我想要一个MySdk.nupkg的消费者(称之为Consumer.csproj)从Trans.nupkg获取所有资产。

如果我从MySdk.nupkg中删除Trans.nupkg的Assets,那么MySdk.nupkg的nuspec和nupkg反映了排除,当Consumer.csproj引用MySdk.nupkg时,它将不会获得传递资产。

有没有办法实现这个目标?

感谢。

更新:

如果我尝试将PrivateAssets设置为None并使用ExcludeAssets为MySdk.csproj中的Trans.nupkg引用构建,如下所示:

<PackageReference Include="Trans" Version="1.0.*" PrivateAssets="None" ExcludeAssets="build" />

MySdk.nupkg中生成的nuspec如下所示:

<dependency id="Trans" version="1.0.0" include="Runtime,Compile,Native,ContentFiles,Analyzers" />

这意味着当Consumer.csproj添加如下引用时:

<PackageReference Include="MySdk" Version="1.0.0" />

返回Trans.nupkg的传递引用将不包括自定义构建目标,这与我正在尝试完成的目标相反。

1 个答案:

答案 0 :(得分:1)

虽然ExcludeAssets控制MySdk.csproj将使用哪些资产,但PrivateAssets指定哪些资产不会跨越传递依赖项。

PrivateAssets的默认值为contentfiles;analyzers;build,这是Consumer.csproj默认不会获得内置资产(.pros / .targets文件),roslyn分析器和内容文件的原因。

要进行更改,请将Trans包设置PrivateAssets引用至none,这将使Consumer.csproj的行为就像它直接引用Trans包一样(示例也不包括在内)来自MySdk项目的构建时依赖项:

<PackageReference Include="trans" PrivateAssets="none" ExcludeAssets="contentfiles;build" />

有关详细信息,请参阅Controlling dependency assets