为什么XmlSerializer不会在Visual Studio 2019中引起FileNotFoundException?

问题描述 投票:1回答:1

所以我最初遇到此问题中描述的问题:XmlSerializer giving FileNotFoundException at constructor

但是,我们刚刚从Visual Studio(VS)2013 Pro升级到VS 2019 Pro。现在,当我打开了所有的公共语言运行时(CLR)异常(引发时中断),包括System.IO.FileNotFoundException时,我没有中断该异常。我认为这与目标.NET Framework有关(我们也已升级到.NET 4.8)。

也就是说,我做了测试:

  1. [在VS 2019中针对我们的起始框架版本.NET 4.5.2创建了一个测试WinForms项目。
  2. 添加以下默认的Form1类:
public static readonly XmlSerializer kXMLSerializerList = new XmlSerializer(typeof(List<string>));
  1. 确保所有CLR异常(包括System.IO.FileNotFoundException处于启用状态。
  2. Build。
  3. 在VS 2019中启动调试器。

结果:异常不中断

好,让我们尝试VS 2013

  1. VS 2013开始
  2. 打开相同的项目。
  3. 重建。
  4. 在VS 2013中启动调试器。

结果:XmlSerializer FileNotFoundException

因此它似乎不是.NET Framework版本的依赖项。 IDE依赖项?这让我感到困惑。还是C#版本依赖性?有人有任何线索吗?

c# .net xmlserializer
1个回答
0
投票

这似乎是基于C#5.0和C#7.3之间的差异。

注意:\Xml\System\Xml\Serialization\Compiler.cs的.NET 4.5.2和.NET 4.8参考源的比较显示,包括引发异常的行在内,没有任何区别。

感谢@Amy和其他人带领我朝着正确的方向前进。按照他们的指示,通过每个Visual Studio(VS)版本中的“生成”设置来检查语言版本:

[我发现VS 2013语言版本可以升级到C#5.0(我从“默认”更改为它以使用该特定版本)。

在VS 2019中,语言被设置为“根据框架版本自动选择”,并且该控件被禁用。 VS 2019的控制状态下的Why can't I select a different C# version?链接,对于所有.NET Framework版本,默认语言版本均为C#7.3。

© www.soinside.com 2019 - 2024. All rights reserved.