Ориентация на несколько фреймворков, как реализовать? - PullRequest
1 голос
/ 20 июня 2011

У меня есть библиотека ac # (разрабатывается в VS2010) в Mercurial rep, которая в настоящее время нацелена на netFX-3.5.В netFX-4.0 есть некоторые функции, которые я хочу использовать в своей библиотеке, но, поскольку существует множество проектов, ограниченных 2.0 CLR, я также хочу сохранить и поддерживать версию netFX-3.5.Естественно, будет некоторый код (возможно, даже большая часть кода), который будет идентичен в обеих версиях.Теперь я озадачен, что это лучший (или, по крайней мере, хороший) способ сохранить это.

Должен ли я создать отдельный проект в VS?Или, может быть, создать клон репозитория?Есть ли проверенные стратегии для этого?

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

Update2: Как я уже говорил ранее, использовал Добавитькак ссылка функция для достижения желаемого результата следующим образом: создать новый проект для старой (3.5) платформы.Добавьте все файлы как ссылку из топовой версии проекта.В проекте v4.0 добавьте функции netFX-4.0 в класс с помощью спецификации partial class, например ClassName.Net40.cs.У меня отлично работает.

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Обычно люди делают это через цели MSBUID, однако недавно Microsoft выпустила очень классное расширение «Portable Library Tools» Visual Studio, которое добавляет новый тип проекта, очень похожий на библиотеку классов, но уже имеет инфраструктуру для поддержки нескольких платформ., включая Silverlight, WP7.

Проверка http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/

0 голосов
/ 20 июня 2011

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

# if

Один из способов - создать отдельные конфигурации сборки для .NET 3.5 и .NET 4.0, чтобы вы могли указатьОтдельные условные символы компиляции в каждой конфигурации сборки и выполнение таких действий в определенных местах:

#if NET40
    // something specific to .NET 4.0
#else
    // version for .NET 3.5
#endif

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

MQ

То, как я делал это для одного проекта (какое-то время мне требовалась версия Caliburn.Micro для .NET 3.5), былоиспользовать Mercurial Queues для исправления, которое я мог бы применить к хранилищу для понижения версии.Использование MQ было необходимой частью решения, потому что мне все еще нужно было иметь возможность обновить свой клон репозитория CM и повторно применить мои изменения.

Другая причина, по которой условная компиляция не помогла бы мне помочь, заключается в том, чтоСсылка CM на сборку Blend SDK Interactivity должна была перейти на предыдущую версию, и я не знал, как сделать условные ссылки в файле проекта.

(Если вы ранее не использовали MQ: MqTutorial и главы 12 & 13 Mercurial: полное руководство.)

...