Совместное использование кода C # между библиотеками классов Windows и Silverlight - PullRequest
14 голосов
/ 21 января 2009

Мы написали небольшую библиотеку классов Windows, которая реализует методы расширения для некоторых стандартных типов (изначально строк). Я поместил это в библиотеку, чтобы любой из наших проектов мог использовать его, просто ссылаясь на него и добавляя с помощью XXX.Extensions.

Проблема возникла, когда мы захотели использовать некоторые из этих методов в Silverlight. Хотя весь код был совместим, на библиотеку Windows нельзя ссылаться в Silverlight, поэтому мы создали библиотеку Silverlight, в которой были ссылки на одни и те же файлы классов, и поместили директивы компилятора в классы, чтобы разрешить различные использования объявлений и пространств имен. Это работало нормально до сегодняшнего дня, когда я добавил новый класс в библиотеку расширений Windows и понял, что мне нужно помнить, чтобы связать этот класс и с библиотекой Silverlight.

Это не идеально, и я подумал, что у кого-нибудь могут быть идеи для лучшего способа обмена методами расширения и другим вспомогательным кодом между проектами Windows и Silverlight.

Ответы [ 6 ]

15 голосов
/ 21 января 2009

Невозможно установить ссылку из сборки Silverlight на обычную сборку .NET, но вы можете сделать это наоборот.

Итак, создайте общую сборку Silverlight и добавьте свой код в эту сборку. Теперь вы можете установить ссылку на вашу обычную сборку .NET и другую сборку Silverlight на общую сборку Silverlight.

Ограничение состоит в том, что вы можете размещать в нем только код, который будет работать как на .NET, так и на Silverlight CLR, но это ничем не отличается от совместного использования кода.

8 голосов
/ 13 июля 2011

После ответа на этот вопрос от Microsoft появилось новое решение Portable Class Libraries . Здесь - это сообщение в блоге, где они объявили об этом.

Я как раз собираюсь поиграть с ними для обмена кодом между silverlight и некоторым кодом на стороне сервера, который я пишу, поэтому не могу добавить слишком много мимо ссылок в данный момент.

3 голосов
/ 21 января 2009

Время выполнения Silverlight отличается от обычного времени выполнения .NET. Так что вам нужно делать трюки на уровне проекта, чтобы делиться кодом между несколькими платформами.

Вот как я сделал это для контейнера Autofac IoC .

При таком подходе вам не нужно создавать разные проекты для каждой целевой платформы .

PS: есть также Project Linker инструмент из Composite WPF , который позволяет связывать проекты Silverlight и WPF (создает несколько проектов). Но это выглядит грязно.

2 голосов
/ 13 июля 2010

Попробуйте это http://buildassilverlight.codeplex.com/

2 голосов
/ 21 января 2009

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

Если вам интересно, вы можете получить немного понимания от этого блога :

Перекомпилировать источник для другого Платформа, вам нужен еще один проект. Причина этого в том, что проекты должны ссылаться на разные сборки для обоих XNA Framework и базовый .NET Framework (Xbox 360 и Zune используют .NET Compact Framework) и проекты на C # не предоставлять поддержку для ссылок разные сборки для разных платформы.

0 голосов
/ 16 августа 2010

У меня были некоторые проблемы с зависимостями при обращении к библиотеке классов Silveright в .Net.

Альтернативный способ при использовании Visual Studio 2010 и WCF RIA 1.0:

  • Создание обычной сборки библиотеки .Net.
  • Создание библиотеки классов Silverlight. В конфигурации сборки укажите первую библиотеку .NET в качестве «ссылки службы WCF RIA»
  • Поместите свой код в библиотеку .NET в виде файлов "ClassName.shared.cs".
  • WCF RIA будет обрабатывать копирование файла в сборку Silverlight.
...