感谢您使用我的包裹。
我们首先假设以下情况:
<!-- Project A -->
<ItemGroup>
<PackageReference Include="SomePackage" Version="*" />
</ItemGroup>
<!-- Project B -->
<ItemGroup>
<ProjectReference Include="ProjectA" PrivateAssets="all">
<!--<PackageReference Include="Teronis.MSBuild.Packaging.ProjectBuildInPackage" Version="0.1.7" />-->
</ItemGroup>
您告诉 NuGet 您不希望项目 A 被视为 NuGet 依赖项。这是隐含的,你无法控制。缺点是项目 A 的程序集(但不是项目 A 的包的程序集)不存在于项目 B 的包中。
通过删除PrivateAssets="all"
您禁用 NuGet 的隐式行为,项目 A 将被选取为 NuGet 依赖项和每个非依赖项包(也称为传递包)。
现在让我们假设一下:
<!-- Project A -->
<ItemGroup>
<PackageReference Include="SomePackage" Version="*" />
</ItemGroup>
<!-- Project B -->
<ItemGroup>
<ProjectReference Include="ProjectA" PrivateAssets="all">
<PackageReference Include="Teronis.MSBuild.Packaging.ProjectBuildInPackage" Version="0.1.7" />
</ItemGroup>
通过安装我的包,我有助于 NuGet 的隐式行为:不将项目 A 作为 NuGet 依赖项复制到项目 A 生成的直接程序集到项目 B 的 bin 文件夹中。这样做有以下缺点:
由于我的包的隐式行为和使用,您在项目 B 中拥有项目 A 的程序集,这些程序集需要您在项目 A 中引用的包(在您的示例中为“某些包”)提供的程序集。因此,解决方法是将项目 A 中的包显式添加到项目 B 中,如下所示:
<!-- Project A -->
<ItemGroup>
<PackageReference Include="SomePackage" Version="*" />
</ItemGroup>
<!-- Project B -->
<ItemGroup>
<ProjectReference Include="ProjectA" PrivateAssets="all">
<PackageReference Include="Teronis.MSBuild.Packaging.ProjectBuildInPackage" Version="0.1.7" />
<!-- Use the SAME version like in Project A. -->
<PackageReference Include="SomePackage" Version="*" />
</ItemGroup>
这应该可以解决你的问题。当它不起作用时,请提供反馈。