2010-12-27 8 views

Répondre

4

J'aborde habituellement en ayant dll séparés par Playform, donc je peux utiliser les fonctions de la plate-forme disponibles lorsque cela est possible (souvent ni est un sous-ensemble strict/surensemble, et viser l'intersection est trop limiter si vous voulez la performance de battement etc.). Cependant, la plupart des fonctionnalités sont mais la quantité de code #if (avec des symboles de construction spécifiques à la fonction) est souvent minime. Pour éviter les problèmes d'oubli d'ajout de fichiers projet, j'utilise un caractère générique récursif dans csproj, de sorte que tous les fichiers .cs sont inclus automatiquement.

+0

Cela signifie que vous avez deux projets distincts (un .NET et un CF.NET), tous deux incluant le même fichier source, mais le type de projet est en train de changer? Ainsi, lorsque vous modifiez un projet, les deux seront automatiquement modifiés? –

+0

@Arnaud oui, exactement cela. –

+0

Merci pour l'explication :), je vais essentiellement distinguer les deux cadre en raison de la gestion des périphériques et de la batterie ... (Plus facile dans .NET que CF.NET) –

1

Envisagez d'utiliser des directives de préprocesseur.

Vous pouvez créer 2 versions de la même bibliothèque pour le format .NET général et pour CF.

Comme:

#if (!COMPACT_FRAMEWORK) 
      // some code only for general .NET 
#endif 
+0

Oui mais par défaut, devrait être le projet un projet Windows (.NET FW) ou un projet de périphérique intelligent (CF.NET FW)? –

+0

Ce doit être "class library". – Incognito

+0

Oui, mais lors de la création, choisissez d'abord le type de projet que vous utiliserez (Smart ou Windows). ;) –

2

Je trouve qu'il y a deux approches pour partager des classes de bibliothèques entre les bases de code .NET et .NET CF.

Le code est identique

Souvent, les bibliothèques peuvent être identiques, en particulier si elles sont des bibliothèques de base qui ont des calculs ou des classes d'affaires identiques. Pour les bibliothèques non-UI, c'est souvent le cas puisque .NET CF est principalement un sous-ensemble de .NET.

Dans ce cas, vous pouvez simplement créer un projet de périphérique et l'inclure dans votre projet Windows complet. Vous recevrez un avertissement que vous chargez un projet de périphérique, mais si vous n'avez pas utilisé de code spécifique CF, tout va bien.

Le code est très similaire, mais différent

Dans ce cas, je crée deux projets et donc deux assemblées. Un de ces assemblages je fais le principal et incluez tous les dossiers qui sont employés. Dans la seconde, j'ajoute les fichiers en tant que liens pour les inclure en tant que références, donc les mises à jour sont reflétées. Ensuite, j'utilise ifdefs pour tous les cas particuliers où ils peuvent différer.

+0

Dans mon cas, c'est une bibliothèque technique (petit framework) qui embarque l'API de tous les périphériques qu'il doit allumer. Mais tous ces appareils n'ont pas la même version d'OS (certains sur WinCE, d'autres sur WinMobile, d'autres sur XP Embedded) et la gestion de la batterie est différente dans certains cas, c'est pourquoi j'ai posé la question. Seules les choses qui changent sont la façon de vérifier l'état de l'appareil, donc, pour vous, quelle serait la meilleure solution? Merci pour votre réponse. –

+0

Tout d'abord, la version du système d'exploitation ne devrait pas avoir beaucoup d'importance puisque .NET l'isole, donc tout le matériel de base fonctionnera. Je construirais probablement un assembly pour CE/WM en tant que bibliothèque CE 5.0, et un autre pour XP embarqué. Puis partagez le code et ifdefs toutes les différences. – skeeve

Questions connexes