Visual studio 2017 VS 2017 MS测试,多目标参考Can';t一些加载组件 安装程序

Visual studio 2017 VS 2017 MS测试,多目标参考Can';t一些加载组件 安装程序,visual-studio-2017,mstest,.net-standard,Visual Studio 2017,Mstest,.net Standard,一个基本库(Lib.Core),以NetStandard 2.0和NetFx 4.6.1为目标,并引用System.ComponentModel.Annotations 一种消费者库(consumer.Core),以NetStandard2.0为目标,引用基本库(Lib.Core)并引用System.ComponentModel.Annotations 4.4.0.0 以NetFx 4.6.1为目标的使用者库(consumer.Full),引用基本库(Lib.Core)和核心使用者库(consu

  • 一个基本库(Lib.Core),以NetStandard 2.0和NetFx 4.6.1为目标,并引用System.ComponentModel.Annotations
  • 一种消费者库(consumer.Core),以NetStandard2.0为目标,引用基本库(Lib.Core)并引用System.ComponentModel.Annotations 4.4.0.0
  • 以NetFx 4.6.1为目标的使用者库(consumer.Full),引用基本库(Lib.Core)和核心使用者库(consumer.Core),并引用System.ComponentModel.DataAnnotations 4.0.0
  • 以NetFx 4.6.1为目标并引用NetFx使用者库(consumer.Full)的MS测试项目
问题 在以下错误中执行测试结果:

System.IO.FileNotFoundException:无法加载文件或程序集“System.ComponentModel.Annotations,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件

问题:
我需要在测试项目中配置一些东西来实现这一点吗?

您的
Lib.Core
项目取决于
System.ComponentModel.Annotations
NuGet包。由于
Consumer.Core
项目引用了
Lib.Core
,并且只支持netstandard2.0目标,这会导致对高于包含框架的程序集版本的引用成为依赖项闭包的一部分

由于测试项目不会以过渡方式获取NuGet包,因此需要手动将
System.ComponentModel.Annotations
包安装到测试项目中。使用此NuGet引用,测试通过


请注意,在这种情况下,如果测试项目是基于SDK的项目(.NET核心单元测试模板,目标框架更改为
net461
),则甚至不会通过传递方式获取NuGet引用,因为测试项目只会从完整的框架“切片”获取引用转换项目到项目引用的。(可以讨论这是否是一个bug)

我理解为什么直接引用没有通过,但我不理解它如何认为它需要4.2.0.0版本。在4.6.1和标准2.0之间是否隐藏在外观中?是的,.net标准中的版本高于.net framework(参见示例),甚至程序集名称也不同。最简单的修复方法是安装NuGet软件包或将测试项目更改为set
PackageReference