相关疑难解决方法(0)

反序列化XML时的FileNotFoundException

我们最近开始看到FileNotFoundException在反序列化XML时偶尔被抛出.消息是无法找到用于从XML映射到代码的临时程序集.从这个文档看起来,当.NET Framework无法创建此文件时会发生这种情况(但是即使在内部异常中也没有捕获到这个原因).

这是一个例外:

Type : System.IO.FileNotFoundException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Could not find file 'C:\Documents and Settings\user\Local Settings\Temp\c5_nfoko.dll'.
Run Code Online (Sandbox Code Playgroud)

每个错误的文件名都不同,但错误始终相同,它来自此处(底部的完整调用堆栈):

at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type)
Run Code Online (Sandbox Code Playgroud)

CSharpCodeGenerator试图生成程序集时.我们多年来一直在生产中使用这些代码,而且非常稳定.它刚开始在上周左右失败了.我们想知道它是否与最新的Microsoft安全补丁有关,因为它会影响我们在多个操作系统(XP和Server 2003)上的.NET 2.0和.NET 4.0代码版本.

错误是零星的,再次运行该过程通常会导致它消失.这是一个单线程命令行应用程序,它检索文件并将它们插入到数据库中.

我找不到其他人有同样的问题,但它并没有被隔离到相同的代码行,我们有几个地方使用System.Xml.Serialization代码,我们已经看到了每个错误.这段代码也不是我们最近改变的.

我能找到的最接近的其他帖子就是这个.

在我们的QA VM上没有病毒扫描程序,因此我不认为这是一个问题.我们在托管环境和单独的客户端站点中也看到了这个问题.

我们尝试过:

  1. 清理此临时目录
  2. 检查临时目录的权限(用户是框中的本地管理员)
  3. 通过使用sgen.exe生成XmlSerializers.dll并将它们部署到app文件夹(问题仍然存在,就像.NET Framework不想使用这些程序集一样).

如果有人有任何想法或建议会有所帮助.

完整的callstack:

Type : System.IO.FileNotFoundException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Could not find file 'C:\Documents and Settings\user\Local …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization filenotfoundexception

11
推荐指数
1
解决办法
5727
查看次数

使用XmlAttributeOverrides预编译XmlSerializers

在.NET中构造XmlSerializer实例时,动态生成用于序列化和反序列化指定类型的程序集.这是一个耗时的过程.Microsoft的sgen.exe工具可用于预编译XmlSerializer实例,以便以后使用它们而无需动态生成它们.不幸的是,对于使用XmlAttributeOverrides的XmlSerializer实例,这是不可能的.

有没有办法预编译这些XmlSerializer实例以避免在运行时生成?

.net sgen xml-serialization

8
推荐指数
1
解决办法
3723
查看次数