У меня есть 3 сборки: приложение WP7 (с ориентацией на 7.0), проект веб-служб (работает с 4.0) и переносимая библиотека классов (построенная из шаблона и ориентированная на 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, Retargetable = Yes»
Трассировка стека указывает, что это первый вызов PCL, что имеет смысл, если это ошибка загрузки типа, как указано выше.
Если я удалю ссылку на сборку PCL, а затем добавлю файл класса ключа к обеим сборкам, все будет работать нормально, однако я хочу избежать такого дублирования кода... поэтому возникает вопрос: Почему это происходит? Как мне настроить PCL, чтобы он функционировал, как написано?
EDIT: немного больше информации... мой PCL использует XmlSerializer, что-то, что находится в System.Xml.dll на рабочем столе и в System.Xml.Serialization.xml в Silverlight... сборка, которая не существует в полной настольная среда... так что этот сбой имеет некоторый смысл, только в мире PCL некоторые из этих сборок/классов разбиты сами по себе
В этом случае XmlSerializer фактически находится в C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETPortable\v4.0\Profile\Profile2\System.Xml.Serialization.dll (который ссылается на PCL)... в качестве теста я добавил ту же ссылку в веб-проект... однако во время выполнения веб-проекта происходит сбой с желтым экраном смерти, в котором говорится, что:
Не удалось загрузить файл или сборку «System.Xml.Serialization» или одну из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)