我有一个项目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的传递引用将不包括自定义构建目标,这与我正在尝试完成的目标相反。
答案 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。