Question

Je prévois libérer une bibliothèque .NET open source (MIT), mais aussi notamment les DLL pour le rendre facile pour les gens afin qu'ils ne sont pas de tout compiler eux-mêmes.

Ma bibliothèque est très simpliste dans les types auxquels il fait référence, la seule dépendance réelle semble être .NET 3.0 ou supérieur (car il se réfère à Func<T> etc.).

Je veux que ma bibliothèque pour être utilisable par plusieurs cibles, y compris le serveur .NET 4.0, serveur .NET 3.5, Windows Phone 7 Silverlight, Silverlight normale, XNA (Téléphone), XNA (Windows) et XNA (XBox 360).

Je veille à ne pas utiliser des types qui ne sont pas disponibles sur les plates-formes je cible, par exemple HashSet<T> n'est pas disponible sur Windows Phone 7, donc je ne suis pas l'utiliser.

Est-ce que je dois faire différents projets et ainsi de multiples DLL pour chacun de ces objectifs ou est-il un moyen de produire une DLL commune pour tous à utiliser?

Était-ce utile?

La solution

Il y avait une conférence à PDC cette année à faire ce genre de choses:

C'est vidéo et ce sont les diapositives .

Autres conseils

fichiers de projet séparés avec partagés, les fichiers source commune est le chemin à parcourir. Assurez-vous que les projets sont à construire à différents dossiers de sortie (par exemple non \bin\Debug, mais \CF\bin\debug) afin d'éviter des ennuis lors de la consommation de la bibliothèque de cibles multiples (comme un projet de bureau et périphérique).

Le cadre OpenNETCF.IoC est un exemple - il prend en charge le bureau, CF, Windows Phone et MonoTouch tous avec les mêmes fichiers source, mais les fichiers de projets séparés par plate-forme. Essayer de compiler un seul ensemble binaire qui est utilisable sur tous était trop désordonné et difficile à maintenir.

Le principal point de la douleur ici est de garder tous les fichiers du projet en synchronisation lorsque vous ajoutez / fichiers de changement et de faire que tous les compiles toujours. Un serveur de build peut le faire si vous avez accès à l'automatisation (qui ne Codeplex malheureusement pas exposer).

Je fais quelque chose de similaire avec une bibliothèque qui cible .NET et Silverlight. J'ai un seul ensemble de fichiers source et les fichiers de projet distincts qui pointent vers les mêmes fichiers partagés.

Parfois, j'utilise la compilation conditionnelle pour inclure des fonctionnalités seulement pour .NET et non Silverlight, ou pour tirer parti des fonctionnalités disponibles dans .NET qui mènent à une plus belle mise en œuvre et une chute en arrière pour la mise en œuvre Silverlight où il a des lacunes.

La même approche pourrait être utilisée pour les autres plates-formes que vous évoquez -. Un ensemble de fichiers source, mais un fichier de projet distinct par plateforme cible

Si vous utilisez un outil de construction comme MSBuild ou NAnt, vous pouvez alors la construction de produire toutes les DLL pour toutes les plates-formes cibles lorsque vous exécutez le script.

Regardez le Outils de bibliothèque portable (Dernière mise à jour: 6/17/2011) l'extension de BLC Team (Microsoft) et cette introduction MSDN article (Dernière mise à jour: Août 2011).

Je suggère une bibliothèque pour chacune des plate-forme. Laissez-moi vous expliquer.

Disons que le .NET Framework complet comprend un tas de fonctionnalités, des méthodes qui ne font pas partie du .NET Compact Framework comme celui que vous trouverez peut-être avec Windows CE et smartphones. Ainsi, afin de tirer pleinement parti de la pleine charge des possibilités de chaque plate-forme, je miserait une abondance bibliothèque commune d'interfaces, vous mettre en œuvre ces interfaces dans une bibliothèque de classes de .NET Framework platform specific qui vous permettront de profiter pleinement sur ce qui est offert sur une plate-forme spécifique.

Par contre, si la réutilisation commune de code, et pour le bien de maintenabilité, vous pouvez préférer aller avec une seule bibliothèque « do-them-all ». Dans ces conditions, vous devez être pleinement conscient de chacune des différences entre les nombreuses plates-formes que vous souhaitez soutenir.

Ceci est évidemment une analyse importante et question l'architecture, des deux souffriront le manque d'une plate-forme sur l'autre.

Voici comment je procéderais en face d'une telle situation:

  1. J'enquêterait sur les différences entre le .NET Framework spécifique de la plate-forme;
  2. Je mettrais de côté tout (au besoin) les objets courants que vous pensez que vous pourriez avoir besoin;
  3. je voudrais souligner les différences, qui est, les objets que vous pouvez utiliser sous une seule plate-forme, mais pas l'autre;

Ceci est une analyse biologique, vous devrez effectuer afin de voir ce qui arrive ensuite.

C'est, pour une certaine sorte d'approche cascade.


En ce qui concerne une approche Scrum, si je puis dire que cela suggère empirisme, je dirais essayer une seule bibliothèque commune pour tous, et voir ce que vous pouvez faire. Si vous tombez sur certaines choses que vous ne pouvez absolument pas faire, alors il pourrait être utile de créer seulement une autre bibliothèque de classes qui dépendra de votre bibliothèque « do-them-all » de sorte que vous avez un bloc commun pour chaque plate-forme, puis une autre spécifique bibliothèques pour ce que vous ne pouvez pas faire dans la position commune. Faites-le, et voir quels sont les avantages que vous avez obtenu de lui, et de trouver un moyen de sortir de problème quand vient le temps d'être plus précis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top