我正在研究一个包含以下目标框架的解决方案:
(注:我们的项目中没有一个目标的框架版本低于4.7.2)。
我一直在逐步将一些库项目从4.7.2升级到Standard2.0,并将一些前端项目从4.7.2升级到6.0。在升级了几个项目之后,我们的一些单元测试失败了,所有这些都是由一行代码造成的:
var serializer = new XmlSerializer(typeof(BusinessClass));
XmlSerializer
类属于System.Xml.Serialization
命名空间。BusinessClass
类存在于.Net标准2.0库项目中。
运行这些测试的项目是一个.Net框架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.Library
nuget包.netstandard
引用的属性下,我已经将Copy Local
设置为True
,并确认netstandard.dll
出现在bin
文件夹.中。
csproj
文件中:真
app.config
中添加了一个bindingRedirect
,如下所示:2.0.0.0
.
bindingRedirect
,迫使降级为System.Xml.XmlSerializer
nuget包引用到MSTest项目.我已经将BusinessClass
. nuget包引用到包含的库中
上述任何步骤都没有解决这个问题。我开始觉得与netstandard
的关系是症状性的,而不是病因。
不幸的是,我没有想法了。我还能采取什么其他方法来进一步调试这个问题呢?
发布于 2022-08-26 10:37:16
因此,如果在XmlSerializer
标准或.Net核心项目中使用.Net,您将得到这个异常。然而,这条消息非常误导人,修复与添加对netstandard
的引用毫无关系。
修复实际上非常简单:我向Microsoft.XmlSerializer.Generator
添加了一个Nuget引用,它突然起作用了。在运行时,在.Net标准或.Net核心上下文中使用.Net包是必需的。
有关此的微软文章:https://learn.microsoft.com/en-gb/dotnet/core/additional-tools/xml-serializer-generator
https://stackoverflow.com/questions/73487144
复制相似问题