FileNotFoundException для mscorlib.XmlSerializers.DLL, которого не существует

Я использую XmlSerializer для десериализации определенного типа в mscorelib.dll

XmlSerializer ser = new XmlSerializer( typeof( [.Net type in System] ) );
return ([.Net type in System]) ser.Deserialize( new StringReader( xmlValue ) );

Это вызывает пойманный FileNotFoundException, когда сборка загружена:

"Could not load file or assembly 'mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified."

FusionLog:

=== Pre-bind state information ===
LOG: User = ###
LOG: DisplayName = mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
 (Fully-specified)
LOG: Appbase = file:///C:/localdir
LOG: Initial PrivatePath = NULL
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\localdir\bin\Debug\appname.vshost.exe.Config
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.EXE.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.EXE.

Насколько я знаю, нет mscorlib.XmlSerializers.DLL, я думаю, что имя DLL было автоматически сгенерировано .Net, ищущим сериализатор.

У вас есть возможность создать myApplication.XmlSerializers.DLL при компиляции для оптимизации сериализации, поэтому я предполагаю, что это часть проверки инфраструктуры.

Проблема в том, что это, похоже, вызывает задержку загрузки приложения - в этот момент кажется, что оно зависает на несколько секунд.

Есть идеи, как этого избежать или ускорить?

Я имею дело с типом RSAParameters, который используется как часть системной криптографии. Я обошел это сейчас, сохранив зашифрованный ключ другим способом и самостоятельно создав новый RSAParameters. Похоже, что сериализовать (например, ключи шифрования / дешифрования) - довольно обычное дело.

Keith 15.08.2008 17:15

Я столкнулся с этой проблемой при попытке запустить инструмент тестирования Ranorex. На данный момент у меня есть обходной путь, но я не смог его исправить, и их служба поддержки еще не связалась со мной. : - /

Dan Csharpster 24.10.2017 17:38

Проверьте версию .NET созданного файла mscorlib.XmlSerializers.dll и свой проект. Должно быть так же. Проверьте это: stackoverflow.com/a/52848813/5639198

Sashus 17.10.2018 09:59

@Sashus Спасибо за помощь, но этот вопрос возник более десяти лет назад, у меня больше нет доступа к проекту, в котором возникла эта проблема.

Keith 19.10.2018 02:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
4
15 816
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Задержка связана с тем, что, поскольку система не смогла найти DLL-библиотеку пользовательского сериализатора, она создает эквивалентный код (что отнимает очень много времени) на лету.

Чтобы избежать задержки, попросите систему создать DLL и убедиться, что она доступна для .EXE - вы пробовали это?

Спасибо, @Will Dean, я вроде как подумал, но даже для этого это кажется слишком медленным. Если бы это была моя собственная сборка, создающая сборку сериализации, не было бы проблем, но как бы я сделал это для mscorlib?

Keith 15.08.2008 15:10
Ответ принят как подходящий

Я сейчас догадываюсь. но:

  1. Система может генерировать сериализатор для всей mscorlib, что может быть очень медленным.
  2. Вы, вероятно, могли бы избежать этого, обернув системный тип в свой собственный тип и вместо этого сериализуя его - тогда вы получили бы сериализатор для своей собственной сборки.
  3. Возможно, вам удастся создать сериализатор для mscorlib с помощью sgen.exe, который был старым способом создания dll сериализатора до того, как он был интегрирован в VS.

Еще раз спасибо. Я думаю, что это (1), но я не могу сделать (2), поскольку это структура. Я попробую (3)

Keith 15.08.2008 15:49

> но я не могу сделать (2), так как это структура. Я знаю, что я здесь тупой, но в чем проблема, что это структура - очевидно, может происходить дополнительное копирование, но относительно затрат на сериализацию xml кажется маловероятным, что это очень важно. В любом случае, что это за тип system.xx?

Will Dean 15.08.2008 16:57

Хорошо, я столкнулся с этой проблемой и нашел решение для моей области.

Это произошло потому, что я пытался сериализовать список в XML-документ (файл) без корневого атрибута XML. Как только я добавил следующие файлы, ошибка исчезнет.

XmlRootAttribute rootAttribute = new XmlRootAttribute();
rootAttribute.ElementName = "SomeRootName";
rootAttribute.IsNullable = true;

Не знаю, решит ли это вашу проблему, но она устранила мою.

Другие вопросы по теме