Невозможно разрешить сборки, которые используют библиотеки Portable Class

У меня возникла проблема с разрешением сборки на конечной машине, и я считаю, что это связано с использованием переносных классов классов....

У меня есть приложение .NET 4.0, которое изначально было написано в Visual Studio 2010. Недавно мы обновились до Visual Studio 2012, и мы создали несколько проектов, которые являются портативными библиотеками классов. Я не считаю, что нам нужны эти функции сейчас, но мы также создаем приложение Windows 8 Store, которое может извлечь выгоду из этих библиотек.

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

Когда я смотрю на библиотеку в отражателе dotPeek, он показывает атрибут платформы как:

.NETPortable, Version = v4.0, профиль = Profile5

И ссылки кажутся 2.0-иш:

mscorlib, Version = 2.0.5.0

Система, версия = 2.0.5.0

System.Runtime.Serialization, Version = 2.0.5.0

Когда я запускаю приложение на этой машине конечного пользователя, я вижу ошибку в файле журнала:

Не удалось загрузить файл или сборку, "System.Core, Version = 2.0.5.0..."

Googling System.Core 2.0.5.0, похоже, относится к SilverLight - который, как представляется, является одной из целевых фреймворков.

Этот компьютер не имеет установленной Visual Studio, но имеет обновление .NET 4.0 (4.0.3)

Есть ли что-то, что я должен делать по-другому для компиляции, что-то, что я должен исследовать в своих зависимостях или что-то, что я должен искать для установки на машине конечного пользователя? К чему относится 2.0.5.0?

Ответ 1

Для .NET 4 вам необходимо обновить (KB2468871) для переносных библиотек классов. Из статьи KB:

Функция 5

Изменения в поддерживаемых портативных библиотеках. Эти изменения включают API обновления и модификации связующего. Это обновление позволяет связывать CLR успешно в портативные библиотеки, чтобы одна DLL могла работать на .NET Framework 4, в Silverlight, на Xbox или на Windows Phone. Это обновление добавляет общедоступные API Silverlight к .NET Framework 4 в в том же месте. Подписи API останутся Платформа. Все модификации на 100% совместимы и будут не нарушать существующий код.

Также см. раздел "Развертывание приложения .NET Framework" в Документация по переносимой библиотеке MSDN.

EDIT: На самом деле, если на компьютере установлен .NET 4.0.3, как вы упомянули, этого должно быть достаточно. Можете ли вы дважды проверить, действительно ли он установлен?