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