在MSBuild中表示可传递依赖项,而不导入PackageReference

在MSBuild中表示可传递依赖项,而不导入PackageReference,msbuild,nuget,csproj,nuspec,nuget-spec,Msbuild,Nuget,Csproj,Nuspec,Nuget Spec,我有一个项目MySdk.csproj,我在构建时通过dotnetpack打包。我想说的是,这个项目对Trans.nupkg有一个可传递的依赖关系,但实际上我不想在MySdk.csproj的构建过程中从Trans.nupkg导入所有资产。我确实希望MySdk.nupkg的消费者(称之为consumer.csproj)从Trans.nupkg获取所有资产 如果我从MySdk.nupkg中排除Trans.nupkg的资产,则MySdk.nupkg的nuspec和nupkg反映了排除,并且当Consum

我有一个项目MySdk.csproj,我在构建时通过dotnetpack打包。我想说的是,这个项目对Trans.nupkg有一个可传递的依赖关系,但实际上我不想在MySdk.csproj的构建过程中从Trans.nupkg导入所有资产。我确实希望MySdk.nupkg的消费者(称之为consumer.csproj)从Trans.nupkg获取所有资产

如果我从MySdk.nupkg中排除Trans.nupkg的资产,则MySdk.nupkg的nuspec和nupkg反映了排除,并且当Consumer.csproj引用MySdk.nupkg时,它将不会获得可传递资产

有没有办法做到这一点

谢谢

更新:

如果我尝试将PrivateAssets设置为None,并将ExcludeAssets设置为build以便从MySdk.csproj进行Trans.nupkg引用,如下所示:

<PackageReference Include="Trans" Version="1.0.*" PrivateAssets="None" ExcludeAssets="build" />
<dependency id="Trans" version="1.0.0" include="Runtime,Compile,Native,ContentFiles,Analyzers" />
<PackageReference Include="MySdk" Version="1.0.0" />

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

<PackageReference Include="Trans" Version="1.0.*" PrivateAssets="None" ExcludeAssets="build" />
<dependency id="Trans" version="1.0.0" include="Runtime,Compile,Native,ContentFiles,Analyzers" />
<PackageReference Include="MySdk" Version="1.0.0" />

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

<PackageReference Include="Trans" Version="1.0.*" PrivateAssets="None" ExcludeAssets="build" />
<dependency id="Trans" version="1.0.0" include="Runtime,Compile,Native,ContentFiles,Analyzers" />
<PackageReference Include="MySdk" Version="1.0.0" />


返回Trans.nupkg的可传递引用将不包括自定义构建目标,这与我试图实现的目标相反。

虽然
排除资产
控制MySdk.csproj将使用哪些资产,但
私有资产
指定哪些资产不会在可传递依赖项之间流动

PrivateAssets
的默认值是
contentfiles;分析仪;生成
,这就是Consumer.csproj在默认情况下无法获取生成时资产(.pros/.targets文件)、roslyn分析器和内容文件的原因

若要更改,请将
Trans
包设置
PrivateAssets
引用为
none
,这将使Consumer.csproj的行为就像它直接引用
Trans
包一样(示例还排除了MySdk项目中的构建时依赖项):



有关更多信息,请参见。

右侧,但问题恰恰相反。我确实希望Consumer.csproj从Trans.nupkg获取构建资产。我不希望MySdk.csproj在构建时运行Trans.csproj中的构建资产。基本上,我想说的是,用于MySdk的nuspec应该依赖于Trans.nupkg……但我不想在MySdk.csproj的构建过程中使用Trans.nupkg的构建资产。我只想直接使用nuspec并通过CLI运行nuget pack,但这不适用于Sdk风格的项目——这是一个已知的错误,它正是PrivateAssets=none(将所有资产转发到消费项目)和ExcludeAssets=contentfiles组合的目标;build(不要仅使用此项目的构建逻辑)我尝试过…不起作用:/see updated answer关于此的任何更新,因为我也有一个期望,即PrivateAssets实际推动了项目设置的展示,ExcludeAssets也推动了所有消费项目的展示。但很显然,事实并非如此。您对此有任何更新吗?PrivateAssets基本上阻止了事物的传递,并且Include-/ExcludeAssets(单独)控制着当前项目获得的内容。如果你有一个不同的和具体的Szenario,你可以打开一个新的问题。