msbuild PackageReference.PrivateAssets =全部似乎不起作用

时间:2018-12-08 22:39:14

标签: msbuild

我有一个引用NUnit3TestAdapter的测试项目。我不会将此引用复制到依赖此引用的项目中。

我以为设置PrivateAssets = All可以做到,但是显然我误解了它的工作原理,因为它没有理想的效果。

代码如下:

Rollup \ Rollup.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\UITests\UITests.csproj"/>
  </ItemGroup>

</Project>

UITests \ UITests.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NUnit3TestAdapter" Version="3.11.2">
      <PrivateAssets>All</PrivateAssets>
    </PackageReference>
  </ItemGroup>

</Project>

Directory.Build.rsp

.\Rollup.sln /restore /v:m

运行msbuild后,所有文件都已构建,但是我可以看到NUnit3TestAdapter位于汇总文件夹的bin文件夹中。

我想念什么?

https://github.com/Microsoft/msbuild/issues/3996

1 个答案:

答案 0 :(得分:1)

PrivateAssets可以按预期工作,但是NUnit测试适配器NuGet程序包向构建中添加了一个MSBuild目标,该目标向项目中添加了一些dll文件作为内容项,然后可传递地遍历该构建-这具有相同的功能就像添加文本文件并设置其“复制到输出目录”属性一样。

NUnit3TestAdapter.props包含如下定义:

<Content Include="$(MSBuildThisFileDirectory)NUnit3.TestAdapter.dll">
  <Link>NUnit3.TestAdapter.dll</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  <Visible>False</Visible>
</Content>

如果在Visual Studio解决方案资源管理器中单击“显示所有文件”,则应该看到这些文件。

请注意,测试项目并没有真正被打包或引用。它们应该是叶子项目。测试项目模板甚至包含一个<IsPackable>false</…>定义,并且XUnit的核心软件包还将其添加为导入的MSBuild文件。测试框架希望您将它们的抽象库而不是运行时程序集/测试适配器包用于共享测试或测试逻辑的项目。