【发布时间】:2022-09-29 18:12:28
【问题描述】:
我正在研究一种混合了以下目标框架的解决方案:
- .Net 框架 4.7.2
- .Net 6.0
- .Net 标准 2.0
(注意:我们的项目都没有针对低于 4.7.2 的框架版本)。
我一直在逐步将一些库项目从 4.7.2 升级到 Standard 2.0,以及一些前端项目从 4.7.2 升级到 6.0。在已经升级了几个项目之后,我们的一些单元测试失败了,都是由一行代码引起的:
var serializer = new XmlSerializer(typeof(BusinessClass));
XmlSerializer 类属于 System.Xml.Serialization 命名空间。
BusinessClass 类存在于 .Net Standard 2.0 库项目中。
运行这些测试的项目是一个 .Net Framework 4.7.2 MSTest 项目。
完整的例外是:
System.InvalidOperationException: Unable to generate a temporary class (result=1).
error CS0012: The type \'System.Object\' is defined in an assembly that is not referenced. You must add a reference to assembly \'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51\'.
error CS0012: The type \'System.Enum\' is defined in an assembly that is not referenced. You must add a reference to assembly \'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51\'.
它会导致多次测试失败,但所有这些都是由对XmlSerializer 的单个引用引起的。
我已采取以下步骤尝试解决问题,但无济于事:
-
我尝试在测试项目中引用
NETStandard.Librarynuget 包。 -
在
netstandard引用的属性下,我已将Copy Local设置为True,并确认netstandard.dll出现在bin文件夹中。 -
我已将以下内容添加到测试项目的
csproj文件中:<Reference Include=\"netstandard\"> <Private>True</Private> </Reference> -
我在
app.config中添加了bindingRedirect,如下所示:<dependentAssembly> <assemblyIdentity name=\"netstandard\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" /> <bindingRedirect oldVersion=\"0.0.0.0-2.0.0.0\" newVersion=\"2.0.3.0\" /> </dependentAssembly> -
我已将
bindingRedirect反转为强制降级为2.0.0.0。 -
我已将
System.Xml.XmlSerializernuget 包引用到 MSTest 项目。 -
我已将
System.Xml.XmlSerializernuget 包引用到包含BusinessClass的库中。
上述步骤均未解决此问题。我开始觉得与netstandard 的关系似乎是症状,而不是原因。
不幸的是,我没有想法。我可以采取哪些其他方法来进一步调试问题?
标签: .net mstest .net-standard .net-framework-version