Question

J'utilise 3.5 SP1 sur ma machine, alors que nos clients en utilisent actuellement 3,5 sans SP1. Dans VS2008, je ne connais aucun moyen de cibler la solution ou le projet sur la version 3.5 sans SP1, uniquement sur la version 3.5 avec SP1 que j'ai installée.

Si nous utilisons des fonctions ou des constructeurs non disponibles dans la version 3.5 sans SP1, le code ne fonctionnera pas correctement.

C’est-à-dire que je souhaite détecter au moment de la compilation ce qui ne fonctionnerait pas sans SP1.

Jusqu'à présent, nous avons effectué des tests (sur une machine virtuelle ou une machine distincte) pour voir si l'application se cassait. Cela se produit parfois lorsque nous avons utilisé des parties de l'API non disponibles jusqu'au SP1. Le problème est que cela ne se produit que lorsque le code est réellement exécuté (au moment de l'exécution), et non lorsque l'assembly est chargé.

Une solution serait d’avoir une machine avec VS2008 sans SP1 et d’essayer de compiler le projet. Cependant, je préférerais un outil pour m'aider à détecter une dépendance à 3.5 SP1 (en raison de l'utilisation d'une nouvelle API, ou autre), en analysant le code source ou les assemblys que nous produisons.

Mes pouvoirs sur Google n'ont pas été assez forts avec cette question, des astuces?

Était-ce utile?

La solution

Je viens d'avoir le même problème et j'ai trouvé une solution. Pour notre application, il s’agissait d’un appel à System.Threading.WaitHandle.WaitOne (Int32) qui nous a posé des problèmes. Pour plus de détails sur la manière dont les références aux API introduites dans les versions de service pack peuvent s'infiltrer dans votre code sans que Visual Studio le remarque, voir Le message de Krzysztof Cwalina .

La bonne nouvelle est que, comme Marc a mentionné sa réponse , FxCop a un nouvelle règle qui détecte ces fuites. La mauvaise nouvelle est que la règle est rompue dans FxCop 1.36 lorsque vous ciblez .NET Framework 3.5. Cependant, David Kean explique comment modifier quelques fichiers de configuration XML dans résolvez le problème . J'ai suivi les instructions et FxCop détecte maintenant mes références aux API de Service Pack.

Autres conseils

Que diriez-vous de this ? (règles de ciblage multiple pour FxCop)

Vous pouvez utiliser le code trouvé ici pour détecter les cadres .NET installés.

chaîne Fx35RegistryKey = @ " HKEY_LOCAL_MACHINE \ LOGICIEL \ Microsoft \ NET Framework Setup \ NDP \ v3.5 " ;; objet Fx35ServicePack = Registry.GetValue (Fx35RegistryKey, & "; SP &"; null);

if (Fx35ServicePack == null || (int) Fx35ServicePack < 1) lève une nouvelle exception (& "; .NET Framework 3.5 SP1 est requis. &";);

Il y a une autre option que je n'ai pas essayée. La documentation de Visual Studio indique que vous pouvez cibler spécifiquement le programme d'installation ClickOnce le framework .NET 3.5SP1. Suivez le lien et recherchez & Quot; Ciblage .NET Framework version 3.5 SP1 & Quot ;. Essentiellement, il est indiqué que l’une des opérations suivantes obligera le programme d’installation à installer 3.5SP1:

  • Spécifiez une URL d'erreur dans la boîte de dialogue Options de publication.
  • Spécifiez un nom de suite dans la boîte de dialogue Options de publication.
  • Créez un raccourci sur le bureau dans la boîte de dialogue Options de publication.
  • Exclure un fichier du hachage de la boîte de dialogue Fichiers d'application.
  • Décochez la case Signer les manifestes ClickOnce sur la page de signature.
  • Ajoutez une référence à l'assembly System.Data.Entity.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top