2009-07-03 2 views
12

Предположим, у меня уже есть проект по сборке .NET 3.5. Теперь я хочу построить эту сборку для Silverlight и, кроме того, поддерживать ее версию Silverlight с минимальными усилиями.Ориентация на .NET 3.5 и Silverlight

Что не приемлемо:

  • Создание отдельного проекта для Silverlight построить

Что приемлемо:

  • Добавление пользовательских директив позволяет мне выбрать либо Silverlight или .NET в зависимости от того, например Свойства MSBuild.
  • Добавление специальных конфигураций сборки для Silverlight
  • Добавление разделов #ifdef Silverlight/#endif в исходный код.
  • Как правило, любая другая модификация .csproj/.cs.

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

Если это невозможно, любое решение, обеспечивающее аналогичные преимущества, приемлемо.

+0

вопрос остается неясным. Вы хотите создать сборку, а затем использовать методы этой сборки и т. Д. В приложении Silverlight? Поскольку большая часть вашей реальной работы в Silverlight выполняется через связь с веб-службами, я не уверен, что у вас есть проблема. Возможно, у вас есть проблема с уровнями? Это означает, что у вас есть уровни, у которых нет четких определений между ними. – jcollum

+1

Silverlight - это .NET 3.5. Я считаю, вы имеете в виду Silverlight и WPF. Кроме того, это очень похоже на этот вопрос: http://stackoverflow.com/questions/208123/what-is-the-best-practice-for-compiling-silverlight-and-wpf-in-one-project –

+1

Silverlight is. NET 3.5? Кажется невозможным, поскольку, как вы только что сказали, его проекты ссылаются на разные mscorlib. Более того, это совершенно другая платформа выполнения ... –

ответ

8

Вы также исключили ссылку на файлы внутри вашего проекта из проекта Silverlight? Это довольно распространенный подход к совместному использованию реализации Silverlight и полной CLR. Sharing Code Between .NET and Silverlight Platforms

Также, согласно Джастин Анхель, вы можете ссылаться и использовать библиотеку классов Silverlight из полной CLR. Я не пробовал это сам, и это оставляет некоторые вопросы без ответа, но это делает сценарий простым: http://silverlight.net/blogs/justinangel/archive/2008/12/29/using-silverlight-dlls-on-the-desktop.aspx

+0

Есть ли какой-либо инструмент, позволяющий мне поддерживать исходный проект и проект Silverlight со ссылками (или, по крайней мере, там), синхронизироваться автоматически? –

+1

В Призме (http://compositewpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19170) есть компоновщик проекта. Обзор здесь: http://www.global-webnet.net/blogengine/post/2009/01/10/Project-Linker-sharing-single-code-base-between-Silverlight-and-Desktop-applications.aspx – OdeToCode

+0

Отличный - Я буду ждать других ответов, если они есть. На данный момент кажется, что это лучший вариант, который у меня есть ... –

0

У вас должно быть два проекта, потому что ссылки mscorlib отличаются для двух платформ.

Проверить этот вопрос: http://www.google.ca/search?hl=en&q=targetting+silverlight+and+wpf&meta=&aq=f&oq=

Если все, что вам нужно сделать, это иметь регулярный старые библиотеки .NET, который разделил между ними, то я предлагаю создать два проекта (один для Silverlight, один для регулярных) и включая те же файлы в обоих проектах. Это гораздо легче понять для других разработчиков.

+0

Могу ли я отключить \ включить необходимые параметры, например. with Condition = "'$ (SilverlightBuild)'! = ''"? –

+1

Вы можете, если хотите. Но вам не придется, потому что они включены в два файла проекта. , например. Каждый .csproj #defines SL или WPF или NET35. Каждый csproj включает/исключает любые файлы/библиотеки, которые ему нужны. Также не связывайте файлы, поместите csproj в один и тот же каталог и просто «Добавить -> Существующий элемент». – Ray

+0

Относительно «могу ли я отключить» - я имею в виду «могу ли я поддерживать один проект с использованием атрибута состояния MSBuild?» –

1

Я согласен со Скоттом. Спасите себя от боли. Это два проекта, которые используют одну и ту же базу кода. Вам понадобится использовать VStudio в обеих средах, использовать разные библиотеки, включать/exculde файлы, делать так много всего ... легко!

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

+0

Прочтите мой комментарий к сообщению Скотта. –

0

Я думаю, что вам нужно сделать это правильно. Ваш код Silverlight должен быть только для пользовательского интерфейса и связи с бэкэнд-услугами WCF. Эти службы будут запускать ваш код .NET 3.5 (код, который вы хотите предоставить). Таким образом, у вас есть общий доступ и n-уровень.

Если вы делаете большой расчет на стороне клиента в своем коде Silverlight, а затем отправляете его на сервер (и, возможно, db), то я думаю, что вы открываете дыру в безопасности.

У вас нет убедительной причины, по которой отдельный проект должен получить доступ к коду в проекте Silverlight.

+0

Я знаю об архитектуре приложений Silverlight \ RIA, и я задаю вопрос, потому что я точно знаю, что мне нужно. Так что совет хорош в целом, но здесь он совсем не подходит. –

+0

Могут быть много причин, чтобы делать большие расчеты на клиентах - например, Представьте, что я хотел бы отсортировать некоторые данные (скажем, 1 МБ) локально. Я уже доставлял его клиенту, а стоимость его сортировки намного меньше, чем стоимость получения отсортированных данных непосредственно с сервера. –

+0

Это просто пример. Еще одна программа Paint.NET. В этом случае множество фильтрующих эффектов просто необходимо обрабатывать локально. Постскриптум Не рассказывайте мне об ускорителях Silverlight 3.0 и ускорении GPU, я знаю об этом. Короче говоря, мне нужен точный ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^