FileNotFoundException при десериализации XML

Недавно мы начали наблюдать, как 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'.

Имя файла различается при каждой ошибке, но ошибка всегда одна и та же, она происходит отсюда (полный стек вызовов внизу):

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)

Когда CSharpCodeGenerator пытается сгенерировать сборку.Мы уже много лет используем этот код в продакшене, и он очень стабилен. Он просто начал давать сбой на прошлой неделе или около того. Мы задались вопросом, может ли это иметь какое-либо отношение к последнему исправлению безопасности Microsoft , поскольку оно влияет на версию нашего кода в .NET 2.0 и .NET 4.0 в нескольких операционных системах (XP и Server 2003).

Ошибка носит спорадический характер, и повторный запуск процесса обычно приводит к ее исчезновению. Это однопоточное приложение командной строки, которое извлекает файлы и вставляет их в базу данных.

Мне не удалось найти кого-либо еще с такой же проблемой, но она не изолирована от той же строки кода, у нас есть несколько мест, где используется System.Xml.Serialization , и мы видели эту ошибку в каждом из них. Этот код мы не меняли в последнее время.

Ближайшее другое сообщение, которое я могу найти, - это это .

На нашей QA VM нет антивирусного сканера, поэтому я не думаю, что это проблема. Мы также видели эту проблему как в нашей размещенной среде, так и на отдельном клиентском сайте.

Мы пробовали:

  1. Очистить этот временный каталог
  2. Проверить права доступа к временному каталогу (пользователь является локальным администратором на компьютере)
  3. Создание XmlSerializers.dll с помощью sgen.exe и их развертывание в приложении папка (проблема сохраняется, как будто .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'.
Source : mscorlib
Help link : 
FileName : C:\Documents and Settings\user\Local Settings\Temp\c5_nfoko.dll
FusionLog : 
Data : System.Collections.ListDictionaryInternal
TargetSite : Void WinIOError(Int32, System.String)
Stack Trace :    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources)
at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters options, String[] sources)
at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(CompilerParameters options, String[] sources)
at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
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)

11
задан Community 23 May 2017 в 12:00
поделиться