FileNotFoundException в переносимой библиотеке классов? - PullRequest
2 голосов
/ 19 декабря 2011

У меня есть 3 сборки, приложение WP7 (с таргетингом на 7.0), проект веб-сервисов (под управлением 4.0) и Portable Class Library (созданная из шаблона с таргетингом на WP7, SL4 и .NET 4.0), которая содержит общий тип используется между первыми двумя.

При локальном запуске (в IIS Express) все работает просто отлично, однако при запуске с развернутым экземпляром сборки веб-служб (на удаленном сервере IIS, которым я мало контролирую) происходит сбой со следующим исключением:

System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'System.Xml.Serialization, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 'или одна из его зависимостей. система не может найти указанный файл. Имя файла: 'System.Xml.Serialization, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 '---> System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'System.Xml.Serialization, Версия = 2.0.5.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35, Retargetable = Yes 'или одна из его зависимостей. Система не может найти указанный файл Имя файла: 'System.Xml.Serialization, Версия = 2.0.5.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35, Настраиваемый = Да

Stacktrace указывает, что он находится на первом вызове в PCL, что имеет смысл, если это сбой загрузки типа, как описано выше.

Если я удаляю ссылку на сборку PCL, а затем добавляю файл класса ключей в обе сборки, все работает нормально, однако я хочу избежать такого дублирования кода ... поэтому возникает вопрос: Почему это происходит? Как я могу настроить PCL для работы как написано?

РЕДАКТИРОВАТЬ: немного больше информации ... мой PCL использует XmlSerializer , что-то, что находится в System.Xml.dll на рабочем столе и в System.Xml.Serialization.xml в Silverlight ... сборка, которая не существует в полной среде рабочего стола ... так что этот сбой имеет некоторый смысл, только в мире PCL, некоторые из этих сборок / классов разбиты сами по себе

В этом случае XmlSerializer фактически находится в C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETPortable \ v4.0 \ Profile \ Profile2 \ System.Xml.Serialization.dll (на который ссылается PCL) ... в качестве теста я добавил ту же ссылку на веб-проект ... однако во время выполнения веб-проекта он терпит неудачу с желтым экраном смерти, утверждая, что:

Не удалось загрузить файл или сборку 'System.Xml.Serialization' или одну из его зависимости. Определение манифеста расположенной сборки не сопоставьте ссылку на сборку. (Исключение из HRESULT: 0x80131040)

1 Ответ

3 голосов
/ 19 февраля 2012

Вам потребуется установить KB2468871 на удаленном сервере. Это GDR, который был передан большинству клиентских компьютеров, однако серверам нужно будет включить его (обычно они не устанавливают обновления автоматически).

...