C # – Compilateur de code pour .NET & CF.NET

J’ai un même projet qui doit être compilé avec .NET et Compact .NET Framework.

  1. Il est possible de créer un compilateur C # qui comstackra mon projet avec les deux frameworks?
  2. Certaines fonctionnalités n’étant pas présentes dans CF.NET Framework, je les ai créées moi-même (en créant des classes ayant exactement le même nom et les mêmes options que dans .NET Framework. Si je décore ces classes avec un atsortingbut comme projet et:

    • Utilisez cette classe lorsque vous comstackz le projet à l’aide de CF.NET.
    • Ignorer cette classe lors de la compilation du projet à l’aide de .NET

?

Merci pour toutes les réponses constructives.

[MODIFIER]

Je connais la solution qui consiste à créer deux projets référençant les mêmes fichiers. Le problème est que vous devez à chaque fois comstackr les deux manuellement. De plus, lorsque vous ajoutez un fichier à un fichier, vous devez ouvrir le second et le référencer également, il s’agit simplement d’emprunter pour le faire et, étant donné que nous sums nombreux à travailler sur le même projet, j’aimerais effectuer cette partie automatiquement.

Semble être possible?


[EDIT 2] Tout fonctionne bien sauf … les fichiers de ressources!

Donc, pour résumer, j’ai trois projets:

  • le projet de développement (CF.NET)
  • le projet de version (CF.NET 3.5), y compris tous les fichiers via “”
  • le projet de version (NET 3.5), y compris tous les fichiers via “”

Comme cela a été dit, tout fonctionne bien, mais maintenant mon problème est d’utiliser des fichiers de ressources.

Quelle est la méthode à appliquer pour l’utiliser?

  • Lorsque j’utilise le projet de développement, le fichier de ressources est correctement récupéré
  • Lorsque j’utilise les deux autres projets, ResourceManager lève MissingManifestResourceException

Une idée?

L’idée de base serait de décorer votre code avec les directives #if du compilateur pour chaque version du framework.

#if CFNET // .net CF code #else // .net code #endif 

A partir de là, vous avez deux options:

A) 1 fichier de projet avec des configurations de construction personnalisées

Si vous souhaitez tout avoir dans 1 fichier csproj, vous devrez le modifier manuellement. S’agissant d’un fichier msbuild, il s’agit davantage d’un problème msbuild. Je pense que vous devriez faire les choses suivantes:

  1. Utilisez 2 noms de plates-formes dites “NET” et “CF” (au lieu de la valeur par défaut Any CPU ou x86)
  2. Définir la constante CF (à partir de maintenant, éditer csproj):

    CF

  3. Importez les cibles de construction correctes en fonction de la plate-forme sélectionnée:

    Je ne connais pas le nom du fichier cibles de CF car je ne l’ai pas installé. Ce devrait être quelque part dans C:\Windows\Microsoft.NET\**.targets

B) 2 fichiers de projet contenant chacun la configuration de construction appropriée

Comme je l’ai indiqué au début, et certains commentateurs l’ont fait remarquer, la meilleure solution consiste à avoir 2 fichiers de projet que vous gardez synchronisés. Vous pouvez avoir les mêmes fichiers source dans les deux fichiers de projet.

Donc, une idée serait (au lieu de copier la liste des fichiers manuellement à chaque fois) de

  1. Pensez à utiliser des modèles T4 pour synchroniser les fichiers source (et disposez de 2 solutions pour ne pas être invité à recharger la solution entière à chaque fois) ou à
  2. modifiez les deux fichiers csproj et utilisez une balise de compilation générique comme ceci:

Vous devrez créer différentes configurations de construction pour chacune et définir un indicateur personnalisé tel que USE_CF . Puis encapsulez vos classes personnalisées avec #if USE_CF et #endif afin qu’elles soient ignorées lors de la compilation sans cet indicateur

Il n’y a qu’un compilateur C #, il émet exactement le même IL pour toutes les plateformes. Les assemblages de référence sont différents. Vous devez utiliser les versions CF pour le projet qui cible CF, les versions de bureau pour le projet qui cible .NET. Ce qui nécessite deux projets. Ils peuvent référencer les mêmes fichiers de code source. L’ajout de fichiers de code source exclusivement CF n’est bien entendu plus un problème.

La synchronisation des projets est une fonctionnalité disponible dans VS2010. Destiné à Silverlight, inutile pour un projet des FC bien sûr car il ne le supporte plus.

un meilleur moyen consiste à créer votre bibliothèque de classes de projet normale (.NET) et à append tout votre code. Créez ensuite votre deuxième projet de bibliothèque de classes (.NET CF), mais référencez les fichiers de code du premier projet (non pas copie, mais référence). Ensuite, vous vous retrouvez avec 2 DLL et vous n’avez pas à traiter avec de mauvaises directives de compilation. Vous obtenez le résultat souhaité sans travaux supplémentaires pour maintenir les deux projets. Bien entendu, vous devez faire attention à ce que vous insérez dans le code, car .NET CF est limité par rapport à .NET. Je ne sais pas comment append des références de fichier (raccourcis) à l’aide de Visual Studio, mais j’ouvre le fichier proj dans le bloc-notes et utilise des chemins d’access relatifs aux fichiers à inclure. J’ai utilisé cette méthode pour .NET / .NET CF et également .NET / Silverlight

Consultez également Portable Library Tool CTP http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/?localeName=ko-kr