从您链接的文档中:
排除资产:
这些资产不会被消耗
运行:
lib 和 runtimes 文件夹的内容,并控制这些程序集是否将被复制到构建输出目录
因此,ExcludeAssets="runtime"
明确表示“不要复制 dll”。我建议删除 and 的任何用法,ExcludeAssets
让PrivateAssets
NuGet 使用其默认值。如果您不想要 NuGet 的默认行为,请开始使用这些关键字。
然而,还有另一件事正在发生。你说你的测试项目是一个非 SDK 风格的项目。可以从 SDK 样式项目中以 .NET Framework 为目标,但不幸的是,Visual Studio 的模板称它们为“.NET Core”或“.NET Standard”,因此人们错误地认为他们不能以 .NET Framework 为目标。无论如何,虽然包对于使用 PackageReference 的项目是可传递的,SDK 样式的项目始终是 PackageReference,即使没有引用包。但是,非 SDK 样式的项目不是。您需要在项目中有一个 PackageReference 或将 MSBuild 属性显式设置RestoreProjectStyle
为PackageReference
。否则,NuGet 将查找 packages.config 文件,如果找不到,NuGet 会认为该项目根本不使用 NuGet。
虽然,我现在想到你的测试项目几乎肯定包含对包的引用,至少是测试框架本身。如果这些引用是通过 packages.config 进行的,则这是已知的不兼容性。具有对 PackageReference 项目的项目引用的 packages.config 项目不能完全正常工作。反过来有更好的兼容性,或者也可以将测试项目迁移到 PackageReference。老实说,我强烈建议您将所有可以迁移到 SDK 样式的项目,即使您一直以 .NET Framework 为目标。这是 .NET 的未来,这些工具会更好地工作。更少的这些小问题。
如果测试项目已经在使用 PackageReference,那么问题只是ExcludeAssets="runtime"
传递性地应用,并且通过将其从引用的项目中删除,它将自动流向测试项目。