Вопрос

Я планирую выпустить библиотеку с открытым исходным кодом (MIT) .NET, но и включая DLL, чтобы облегчить людей, чтобы они не должны были составить все себя.

Моя библиотека очень упрощена в типовых ссылках на его ссылки, единственная реальная зависимость кажется .NET 3.0 или выше (так как это относится к Func<T> и тому подобное).

Я хочу, чтобы моя библиотека будет использоваться несколькими целями, включая сервер .NET 4.0, сервер .NET 3.5, Windows Phone 7 Silverlight, Normal Silverlight, XNA (телефон), XNA (Windows) и XNA (Xbox 360).

Я обязательно не использовать какие-либо типы, которые не доступны на платформах, которые я ориентируюсь, например, HashSet<T> Не доступен на Windows Phone 7, поэтому я не использую его.

Нужно ли мне делать разные проекты и, таким образом, несколько DLL для каждой из этих целей или есть ли способ создать общую DLL для них всех для использования?

Это было полезно?

Решение

В этом году был разговор в PDC в этом году о том, чтобы делать такие вещи:

Это видео а также Это слайды.

Другие советы

Отдельные файлы проекта с общими, общие исходные файлы - это путь. Убедитесь, что проекты установлены для построения в разные выходные папки (например, не \bin\Debug, но \CF\bin\debug) Чтобы предотвратить раздражения при потреблении библиотеки из нескольких целей (например, проект настольных и устройств).

То OpenNetcf.ioc framework Приведен пример этого - он поддерживает рабочий стол, CF, Windows Phone и Monotouch все с одинаковыми исходными файлами, но и отдельные файлы проекта на платформу. Попытка компиляции на одну бинарную сборку, используемую для всех из них, было слишком грязным и трудно поддерживать.

Основная точка боли здесь - сохранение всех файлов проекта в синхронизации при добавлении / изменении файлов и убедившись, что все они всегда компилируются. Сервер сборки может сделать это, если у вас есть доступ к автоматизации (который CodePlex, к сожалению, не выставляет).

Я делаю что-то подобное с библиотекой, которая нацелена на .NET и Silverlight. У меня есть один набор исходных файлов и отдельных файлов проекта, ссылающихся на те же общие файлы.

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

Этот же подход можно использовать для других платформ, которые вы упоминаете - один набор исходных файлов, но отдельный файл проекта на платформу.

Если вы используете инструмент сборки, такой как MSBuild или NANT, вы можете попробовать создание всех DLL для всех целевых платформ при запуске скрипта.

Посмотрите Портативные библиотечные инструменты (Последнее обновление: 6/17/2011) Расширение от Команда BLC (Microsoft) И это введение MSDN Статья (Последнее обновление: август 2011 г.).

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

Скажем полное .NET Framework включает в себя кучу функций, методы, которые не являются частью .NET Compact Framework Как тот, с кем вы можете найти с Windows CE и смартфоны. Таким образом, для того, чтобы полностью воспользоваться преимуществами полной нагрузки возможностей каждой платформы, я бы использовал общую библиотеку много интерфейсов, затем вы реализуете эти интерфейсы в пределах .NET Framework platform specific Классическая библиотека, которая позволит вам полностью использовать преимущество перед тем, что предлагается на определенной платформе.

С другой стороны, если общее повторное использование кода, и ради ремонтопригодности вы можете предпочесть пойти с одной библиотекой «DO-EM). В таких требованиях вам необходимо будет полностью знать о каждой из различий между множеством платформ, которые вы хотите поддержать.

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

Вот как я бы продолжал перед такой ситуацией:

  1. Я бы исследовал различия между конкретной платформой .NET;
  2. Я бы отложил все (по мере необходимости) общих объектов, которые вы думаете, вам может понадобиться;
  3. Я бы выделил различия, то есть объекты, которые вы можете использовать под одной платформой, но не другой;

Это органический анализ, который вам придется выполнить, чтобы увидеть, что подходит дальше.

То есть для своего рода подход водопада.


Что касается подхода Scrum, если я могу сказать, так как это говорит о эмпиризме, я бы сказал, попробуйте одну общую библиотеку для них всех, и посмотреть, что вы можете сделать. Если вы столкнулись с некоторыми вещами, вы абсолютно не можете сделать, то может быть уместно создать только другую библиотеку классов, которая будет зависеть от вашей библиотеки «do-eM-всей», чтобы у вас был общий блок для каждой платформы, то некоторые другие конкретные Библиотеки для того, что вы не можете сделать в общем. Сделайте это и посмотрите, какие преимущества вы получили от этого, и найдите выход из неприятностей, когда приходит время, чтобы быть более конкретным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top