Verwenden Sie eine einzelne Visual Studio-Lösung, um sowohl x86 als auch x64 gleichzeitig zu erstellen?
Ich habe ein x86-Visual Studio-Lösung mit vielen Projekt-Dateien. Einige DLLs sind entworfen, um arbeiten wie plugins für andere Anwendungen auf dem system eines Benutzers. Wir bauen einige der DLLs zu können, die Unterstützung von 64-bit-Anwendungen. Was ich tun möchte ist, das setup der Lösung/Projekte so, dass Sie nur auf "Build" bauen sowohl die x86-und x64-Versionen dieser DLLs. Die Lösung enthält C++ - und C# - Projekte. Ich merke, dass "Batch Build" ist in der Lage beide, obwohl es bequemer wäre, wenn die Entwickler könnten einfach auf die gleiche Taste wie Sie zuvor, und alle Ausgabe-DLLs generiert.
Hier ein paar der änderungen, ich habe versucht, ein test-Projekt, aber nicht bekommen, um zu arbeiten:
Habe ich versucht, das ändern der <Target Name="AfterBuild">
zu versuchen:
<Target Name="AfterBuild" Condition=" '$(Platform)' == 'x86' ">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
aber, dass die Ergebnisse in die folgende Fehlermeldung:
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(565,5): Fehler MSB4006: Es ist eine zirkuläre Abhängigkeit in der Ziel-dependency-graph mit Ziel "Bauen".
Ich denke, dass meine Bedingungen verhindern eine unendliche Rekursion, aber ich verstehe, wie MSBuild konnte es nicht sehen, dass Weg.
Habe ich auch versucht:
<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>
aber meine DefaultTargets
scheint, um ignoriert zu werden von innerhalb der IDE von Visual Studio.
Letzte, ich habe versucht, erstellen Sie ein separates Projekt, dass die Einfuhren das erste Projekt:
<?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>
dieser so weit hat gezeigt, die meisten Versprechen. Jedoch Visual Studio scheint zu ignorieren, mein OutputPath
Einstellung von diesem neuen Projekt, und statt dessen die Ausgänge der exe/dll auf dem angegebenen Pfad in das ursprüngliche Projekt. Es gibt keine PropertyGroup
block, dass ich sehen kann, der ausgeführt wird in dem ursprünglichen Projekt zu überschreiben, also ich bin mir nicht sicher, was passiert.
InformationsquelleAutor der Frage PeteVasi | 2009-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wir tun etwas ähnliches zu bauen-core-Assemblys für .NET CF.
Versuchen Sie dies:
InformationsquelleAutor der Antwort Todd
Importieren Projekt ist so Weise funktioniert bei mir in Visual Studio 2010:
TestProject64.vcxproj
TestProject64.vcxproj.Filter
TestProject.vcxproj hat zwei Konfigurationen definiert innen: Release|x86 und Release|x64. Wie Sie sehen können TestProject64.vcxproj hat nur Freigabe|x64-Konfiguration. Definieren von mindestens einer Konfiguration in TestProject64.vcxproj notwendig ist, sonst wird Visual Studio nicht in der Lage sein, um hinzuzufügen TestProject64.vcxproj zu einer Lösung.
Es ist nun möglich, sowohl TestProject.vcxproj und TestProject64.vcxproj, um die gleiche Lösung und Release build|x86 und Release|x64 zur gleichen Zeit.
InformationsquelleAutor der Antwort bogser
Ich denke, der beste Weg, dies zu tun, ist zum aufrufen von msbuild von der Befehlszeile aus. Es sollte nicht nötig, die Bearbeitung von msbuild-Dateien, führen Sie einfach
Ich gehe davon aus, dass wenn ein Entwickler mithilfe von Visual Studio dann werden Sie nur erzeugen, die dlls so können Sie debug mit Ihnen, und dass Sie über eine separate build-Prozess, wenn Sie tatsächlich die Bereitstellung der dlls?
InformationsquelleAutor der Antwort the_mandrill
Für C++, und wenn es ist ein Projekt, dessen Dateien/Einstellungen ändern sich nicht Häufig, einen Weg, es zu tun ist, erstellen Sie zwei Projekte innerhalb der Lösung, mit der beide Projekte beziehen sich auf die gleichen Quellcode-Dateien. Dann, in x64-builds, legen Sie ein Projekt zu bauen, 64-bit und die andere 32-bit. (X86 builds, ein 32-bit-und alle anderen ausgeschaltet.)
Wir haben mit diesem für eine Weile und es funktioniert gut.
Natürlich, Sie müssen vorsichtig sein, dass alle änderungen, die Sie an eine auch auf seine Kopie. also, Wenn Sie hinzufügen/entfernen einer Datei oder ändern Sie die build-Einstellung, die Sie haben, es zu tun in zwei Orten. Source-code-änderungen immer noch nur einmal durchgeführt werden müssen, weil es immer noch nur eine Kopie jeder Quellcode-Datei.
Und, natürlich, können Sie sich entscheiden, dies zu tun ist komplizierter/riskanter als der Wechsel Weg von der Nutzung der IDE. In unserem Fall sind es funktionierte wirklich gut, obwohl.
InformationsquelleAutor der Antwort Leo Davidson
Sind Sie nicht in der Lage sein, dies zu tun mit der Benutzeroberfläche von Visual Studio. Für diese benötigen Sie, um hack MSBuild-Dateien.
Versuchen Sie diesen link von MSDN für MSBuild-Übersicht
InformationsquelleAutor der Antwort Pieter Breed
Vielleicht habe ich es verpasst den Punkt dieser Diskussion. Visual Studio verwenden, gehen Sie auf die Build - /Configuration Manager. In der Active Solution Platform drop-down, wählen Sie "neu..." eine Neue projektmappenplattform " wird angezeigt. Wählen Sie x64 und akzeptieren Sie die Standard-Kopie Aus. Schließen Sie das Dialogfeld und den Configuration Manager. Öffnen Sie nun den Build/Batch Build. Überprüfen Sie die Konfigurationen, die Sie wollen, zu bauen und zu bauen. Finden Sie die x64-build ausführbaren Dateien getrennt von der Win32-execs. Sie können überprüfen, dass diese sind, was beabsichtigt war, mit der rechten Maustaste auf die execs, und wählen Sie Eigenschaften, wählen Sie die Registerkarte "Kompatibilität". In der dropdown-Fenster können Sie überprüfen, um zu sehen, welche Betriebssysteme die exec ausgeführt werden kann. Natürlich, kann es einige andere Optimierungen Sie eventuell tun, um die Ausgabe-Dateien in Ihren richtigen stellen, aber diese Methode scheint etwas einfacher als Narren mit bauen als die oben beschriebenen.
InformationsquelleAutor der Antwort Mike Pliam
Ich würde vorschlagen, erstellen Sie ein dummy-C++ - Makefile-Projekt und rufen Sie dann MSBuild zweimal aus:
InformationsquelleAutor der Antwort Paul B.
Ich lief in dieses problem mit einem Projekt und läuft in VS2008 XP (32-bit) und auch VS2010 7 (64-bit). Die Lösung, die ich verwendet wurde, war die Verwendung des $(PROGRAMFILES) variable. Ist es korrekt aufgelöst, auf beiden Maschinen.
InformationsquelleAutor der Antwort JayRu