2009-06-04 7 views
1

Est-il possible dans Visual Studio 2008 SP1 de cibler un projet COM C++ vers vcredist 2008 au lieu de vcredist 2008 SP1?Utiliser une version spécifique de vcredist?

Nos clients ont installé le vcredist 2008 et nous ne voulons pas les forcer à installer vcredist 2008 SP1. (en milliers d'ordinateurs!)

Répondre

2
  1. Vous pouvez essayer d'enlever le manifeste embed (regarder sous les paramètres du projet Manifest outil) et fournir votre propre manifeste pour l'application qui cible les versions pré sp1 de CRuntime.
  2. Vous pouvez également déployer C-Runtime vous-même, dans le dossier redist sous x86/x64 vous trouverez le dossier de C-Runtime (Microsoft.VC90.CRT) juste copier ces dossiers dans le même dossier que votre exe.
  3. Utilisez l'option C-Runtime statique, de sorte que C-Runtime soit utilisé comme lib statique, c'est utile si vous n'avez pas beaucoup de dll/exe.
+0

J'ai essayé suggestion 1. Le manifeste qui est créé ressemble déjà à ce cibles pré SP1: Mais quand je vérifie avec Dependency Walker il semble que cela dépend encore de la version 9.0.30729.1 (SP1) du fichier? –

+0

+1 à la suggestion # 3. Cela signifie que le runtime C sera réellement compilé dans votre exécutable. Cela rendra l'exe un peu plus grand, mais éliminera le besoin de tout vcredist. Et si la taille vous inquiète, vous pouvez essayer d'utiliser PGO pour avoir le code rarement utilisé sur les sièges arrière de l'exe. – eran

+0

Utilisation de bibliothèques statiques résolu le problème –

3

VS2008, par défaut, continue à cibler le redist RTM VS9. Ce qui se passe dans le vérificateur de dépendances est lorsque VS9 SP1 est installé, un fichier de stratégie est également installé qui redirige les tentatives de chargement des redistribuables RTM vers les redistribuables SP1.

Afin d'obtenir VS9 SP1 pour exiger réellement les runtimes SP1, vous devez ajouter la macro suivante à vos paramètres de projet ou en-tête précompilés:

#define _BIND_TO_CURRENT_CRT_VERSION 1 
+0

Avec moi, cela a pour effet que deux versions de Microsoft.VC90.CRT sont référencées dans le fichier manifeste. –

+0

Cela se produirait si votre projet consistait en des fichiers en cours de construction dans le cadre d'un projet différent. Utilisez-vous une bibliothèque statique pré-construite par exemple? Ou avez n'importe quel type de dépendance de projet. Toutes les bibliothèques statiques devraient être reconstruites aveC#define pour s'assurer que chaque fichier d'objet contienne exactement les mêmes informations de dépendance crt. –

Questions connexes