Quelle est la meilleure façon de cibler plusieurs versions de la .NET framework?

Je suis en train de construire une bibliothèque de classe et je vais déployer un package NuGet, ce qui me permet de choisir différentes assemblées être ajoutés comme des références basées sur l' .NET framework version du projet, il est ajouté. C'est une fonctionnalité très intéressante, mais ce que je me pose est de savoir si il est possible d'avoir un seul projet de bibliothèque de classes, et de le construire à l'encontre de plusieurs versions de la .NET framework?

Je préfère éviter d'avoir:

MyLibrary40.dll et MyLibrary45.dll

si possible, parce que les deux projets auraient à partager beaucoup de code. La version 4.5 offrira async fonctions, qui est de 4,5 fonctionnalité.

Personne ne sait quelle est la meilleure approche pour ce qui est? Puis-je utiliser plusieurs configurations de build? Ou dois-je aller en bas de l'autre projet de route?

Si je travaillais en C++, je serais probablement utiliser plusieurs configurations et #if blocs autour les fonctions qui ne sont pris en charge dans une configuration, mais j'ai peur que cela conduirait à m'avoir deux assemblées du même nom, qui font des choses différentes.

Merci d'avance!

  • Si vous souhaitez cibler les différentes versions, dans une assemblée?
  • c'est la meilleure façon d'obtenir BadImageException 🙂
  • Mais, j'ai trouvé un travail autour de la compilation, vous pouvez regarder les liens que j'ai mis dans ma question, ils peuvent vous aider dans votre voyage - stackoverflow.com/questions/15549011/...
  • Je veux avoir un fichier de projet, mais être en mesure de produire deux assemblées, l'une qui prend en charge .NET 4.0 et un que soutient .NET 4.5 et ajoute quelques async fonctions sans avoir à créer des projets distincts..
  • J'ai demandé à ce aussi, non stricte de la réponse a été donnée, peut-être que vous aurez de meilleures réponses que j'ai eu, ce que vous avez besoin est le gestionnaire de configuration.. stackoverflow.com/questions/15321757/...
  • cela peut aider aussi stackoverflow.com/questions/5006397/...
  • Je crois que vous aurez des problèmes si vous essayez de compiler le code en tant 4.0, qui a 4.5 mots-clés / les appels de méthode qui n'existent pas.
  • vous pouvez le faire, en suivant les liens que j'ai fournis, MAIS ce n'est pas sûr, une fois que vous en bas de l'exécution, il va avoir une mauvaise image d'exception ou de toute autre exception lors de l'appel de l'4.5 fonctionnement
  • Mon point est qu'il n'a même pas de compiler si vous essayez d'utiliser le même projet pour plusieurs assemblées. Si vous essayez de compiler le programme suivant avec 4.0 - il échouera. la classe Program { static void main(string[] args) { DoStuff(); } private static async void DoStuff() { int mavaleur = attendent GetStuff(); } private static async Task<int> GetStuff() { attendent Tâche.Delay(5000); return 0; } }
  • Si vous compilez à la version supérieure, puis essayez de la redirection convenu il va exploser au moment de l'exécution. Ma recommandation serait d'avoir plusieurs projets ou de ne pas utiliser le 4.5 caractéristiques.
  • Merci à tous pour les commentaires, je suis allé avec la solution ci-dessous!
  • C'est ce que la compilation conditionnelle devrait être utilisé pour.

InformationsquelleAutor Dave Kerr | 2013-07-17