Utiliser une seule solution Visual Studio pour créer les deux x86 et x64 en même temps?
J'ai un x86 solution Visual Studio avec de nombreux fichiers de projet dans ce. Certains de Dll sont conçus pour fonctionner comme des plugins pour d'autres applications sur le système d'un utilisateur. Nous sommes en train d'agrandir certains de la Dll pour être en mesure de soutenir les applications 64 bits. Ce que je voudrais faire est de configurer la solution/les projets de manière juste de cliquer sur "Build" va construire à la fois les versions x86 et x64 de ces Dll. La solution contient à la fois le C++ et C# de projets. Je me rends compte que "Lot Build" est capable de construire à la fois, même si ce serait plus pratique si les développeurs pouvaient juste cliquez sur le même bouton, comme ils l'ont déjà et ont tous de la sortie Dll générée.
Voici quelques modifications que j'ai essayé à un projet de test, mais je n'ai pas eu l'occasion de travailler:
J'ai essayé de modifier le <Target Name="AfterBuild">
à essayer:
<Target Name="AfterBuild" Condition=" '$(Platform)' == 'x86' ">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
mais que les résultats dans l'erreur suivante:
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(565,5): erreur MSB4006: Il y a une dépendance circulaire dans le graphe de dépendance des cibles impliquant cible "Construire".
Je pense que mes conditions permettra d'éviter une récursion infinie, mais je comprends comment MSBuild ne pouvais pas le voir de cette façon.
J'ai aussi essayé:
<Project DefaultTargets="MyBuild86;MyBuild64" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
...
<Target Name="MyBuild86">
<PropertyGroup>
<Platform>x86</Platform>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
<Target Name="MyBuild64">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
mais mon DefaultTargets
semble être ignorée de l'IDE de Visual Studio.
Dernière, j'ai essayé de créer un projet distinct que les importations du premier projet:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<OutputPath>..$(Configuration)\x64\</OutputPath>
<ProjectGuid>{A885CAC3-2BBE-4808-B470-5B8D482CFF0A}</ProjectGuid>
</PropertyGroup>
<Import Project="BuildTest.csproj" />
</Project>
et ce jusqu'à présent, a montré la plus prometteuse. Toutefois, Visual Studio semble ignorer mon OutputPath
réglage de ce nouveau projet et à la place des sorties de l'exe/dll pour le chemin d'accès spécifié dans le projet initial. Il n'y a pas PropertyGroup
bloc que je peux voir qui est en cours d'exécution dans le projet d'origine pour remplacer ce, donc je ne suis pas sûr de ce qui se passe.
Vous devez vous connecter pour publier un commentaire.
Nous faire quelque chose de similaire pour construire les assemblages pour .NET CF.
Essayez ceci:
msbuild
appel.msbuild
commandes,Win32
puisx64
, et d'abandonner le rêve d'un seulmsbuild
de commande. En d'autres termes, fondamentalement, la réponse ci-dessous: stackoverflow.com/a/1575053/286021Importer un projet est la manière qui fonctionne pour moi dans Visual Studio 2010:
TestProject64.vcxproj
TestProject64.vcxproj.les filtres
Projet d'essai.vcxproj a deux configurations définies à l'intérieur: Libération|x86 et publication|x64. Comme vous pouvez le voir TestProject64.vcxproj a seulement de presse|x64 de configuration. La définition d'au moins une configuration dans TestProject64.vcxproj est nécessaire, sinon, Visual Studio ne sera pas en mesure d'ajouter TestProject64.vcxproj à une solution.
Il est maintenant possible d'inclure à la fois projet d'essai.vcxproj et TestProject64.vcxproj à la même solution et de construire de presse|x86 et publication|x64 en même temps.
Je pense que la meilleure façon de le faire est d'appeler msbuild à partir de la ligne de commande. Il n'a pas besoin de montage de msbuild fichiers, il suffit d'exécuter
Je suppose que si un développeur est à l'aide de Visual Studio, puis ils vont seulement être la génération de la dll afin de pouvoir déboguer avec eux, et que vous avez un processus de construction si vous êtes le déploiement de la dll?
Pour le C++, et si c'est un projet dont les fichiers/paramètres ne changent pas souvent, une façon de le faire est de créer deux projets au sein de la solution, avec les deux projets se référant à la même source des fichiers. Puis, en x64 construit, définir un projet de construction de 64 bits et l'autre de 32 bits. (En x86 construit, mis l'un sur 32 bits, et de désactiver les autres.)
Nous avons été à l'aide de ce pendant un certain temps et il fonctionne très bien.
Bien sûr, vous devez être attentif à ce que toutes les modifications que vous apportez à un fait aussi sa copie. c'est à dire Si vous ajoutez/supprimez un fichier ou modifier son paramètre de construction que vous avez à faire à deux endroits différents. Modification du code Source encore seulement besoin d'être fait qu'une fois car il n'y a toujours qu'une seule copie de chaque fichier source.
Et, bien sûr, vous pouvez décider que cette opération est plus complexe/risqué que de passer loin de l'aide de l'IDE. Dans notre cas, c'est vraiment bien fonctionné, cependant.
Vous n'allez pas être en mesure de le faire avec l'INTERFACE utilisateur de Visual Studio. Pour cela, vous aurez besoin de pirater le MSBuild fichiers.
Essayez ce lien à partir de MSDN pour MSBuild Aperçu
Peut-être que j'ai raté le point de cette discussion. À l'aide de Visual Studio, aller à la Build/Gestionnaire de Configuration. Dans l'Actif de la Solution de Plate-forme de liste déroulante, sélectionnez "nouveau...", une Nouvelle Solution de Plate-forme de dialogue s'affiche. Sélectionnez x64 et acceptez la valeur par défaut de Copie De. Fermer la boîte de Dialogue du Gestionnaire de Configuration. Maintenant, ouvrez le Build/Lot Construire. Vérifiez les configurations que vous voulez construire et à construire. Vous trouverez la version x64 exécutables distincts de la Win32 exécutifs. Vous pouvez vérifier que ceux-ci sont ce qui était prévu par un clic droit sur le execs et en sélectionnant Propriétés, sélectionnez l'onglet Compatibilité. Dans la liste déroulante de la fenêtre, vous pouvez vérifier pour voir quels systèmes d'exploitation le exec peut être exécuté. Évidemment, il peut y avoir quelques autres peaufinage vous pouvez faire pour obtenir tous les fichiers de sortie à leur place, mais cette méthode semble un peu plus simple que l'idiot avec la construction que celles décrites ci-dessus.
Je suggère de créer un mannequin C++ projet Makefile, puis invoque MSBuild deux fois de lui:
J'ai rencontré ce problème avec un projet en cours d'exécution dans VS2008 XP (32 bits) et aussi VS2010 7 (64-bit). La solution que j'ai utilisée était d'utiliser le $(PROGRAMFILES) de la variable. Il est résolu correctement sur les deux machines.