msbuild PackageReference.PrivateAssets=所有操作似乎都不起作用

msbuild PackageReference.PrivateAssets=所有操作似乎都不起作用,msbuild,Msbuild,我有一个参考NUnit3TestAdapter的测试项目。我不希望将此引用复制到依赖于此引用的项目中 我原以为设置PrivateAssets=All就可以了,但显然我误解了它的工作原理,因为它没有达到预期的效果 代码如下: Rollup\Rollup.csproj <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net472</TargetFramewor

我有一个参考NUnit3TestAdapter的测试项目。我不希望将此引用复制到依赖于此引用的项目中

我原以为设置PrivateAssets=All就可以了,但显然我误解了它的工作原理,因为它没有达到预期的效果

代码如下:

Rollup\Rollup.csproj

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

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

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

</Project>
在我运行
msbuild
之后,所有内容都已生成,但我可以看到NUnit3TestAdapter位于用于汇总的bin文件夹中

我错过了什么


()

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>

NUnit3.TestAdapter.dll
保存最新
假的
如果在VisualStudio解决方案资源管理器中单击“显示所有文件”,您应该会看到这些文件


请注意,测试项目实际上不应该被打包或引用。它们应该是叶子项目。测试项目模板甚至包含一个
false
定义,XUnit的核心包也将其添加为导入的MSBuild文件。测试框架希望您为共享测试或测试逻辑的项目使用其抽象库,而不是运行时程序集/测试适配器包。

那么,我该如何解决这种情况呢?我必须引用NUnit3TestAdapter,否则测试无法从Visual Studio运行。你是说我无能为力,因为包的结构是这样的吗?是的。。或者不要引用其他项目中的测试项目。如果您想在其他机器上执行测试,您仍然可以发布测试项目,并在输出目录中使用
dotnet vstest
,前提是您引用了
Microsoft.NET.test.Sdk
。我想我不明白。我想把测试项目打包成一个NuGet,因为它是由八达通使用的。为此,我创建了一个汇总项目来引用它们。我不知道还有什么选择。八达通建议使用octo pack而不是NuGet来处理这些项目类型。这是正确的。我试图以更少的依赖性实现同样的目标。另外,我不喜欢创建nuspec文件的想法,因为我无法避免将其中的一些配置与msbuild中的配置重复。
.\Rollup.sln /restore /v:m
<Content Include="$(MSBuildThisFileDirectory)NUnit3.TestAdapter.dll">
  <Link>NUnit3.TestAdapter.dll</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  <Visible>False</Visible>
</Content>