首页 文章

msbuild PackageReference.PrivateAssets = All似乎不起作用

提问于
浏览
0

我有一个参考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

在我运行_60091之后,所有内置都已构建,但我可以看到NUnit3TestAdapter位于Rollup的bin文件夹中 .

我错过了什么?

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

1 回答

  • 1

    PrivateAssets 按预期工作,但NUnit测试适配器NuGet包将一个MSBuild目标添加到构建中,该构建将一些dll文件作为内容项添加到项目中,然后传递流过构建 - 这与添加文本具有相同的效果文件并设置其"Copy to Output Directory"属性 .

    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文件 . 测试框架希望您使用他们的抽象库而不是运行时程序集/测试适配器包,用于共享测试或测试逻辑的项目 .

相关问题