Ok, Sorry im Voraus für die Länge dieser Antwort, aber Ihre Frage sehr sauber Kratzer auf der Oberfläche von ziemlich viel Komplexität.
Producing Baugruppen und nativen Code
Von unten nach oben, Visual Studio/MSBuild produziert nicht den Code, der schließlich auf Maschinen ausgeführt wird, die Ihren Code ausführen. Stattdessen erstellen sie eine Assembly voll MSIL (MicroSoft Intermediary Language), die zur Laufzeit von CLR in nativen Code für diese Maschine übersetzt wird. Bei Baugruppen, die Sie regelmäßig verwenden, kann der Computer den systemeigenen Code auch vorab mithilfe von NGEN zwischenspeichern.
Jede Baugruppe kann ein Plattformziel haben. Wie Hans hervorhebt, macht dies eigentlich nicht viel anderes, als den Jitter zu identifizieren, in welchem Geschmack sich der native Code befinden sollte. Diese Angabe ist nur ein paar Bytes in der Kopfzeile Ihrer Assembly und kann tatsächlich nach dem Msbuild geändert werden unter Verwendung der corflags tool. Keine Sorge, Sie brauchen nicht brauchen, um jemals diese zu verwenden.Normalerweise wird während des Buildprozesses msbuild/VS das Plattformziel für jedes Projekt betrachten und eine Assembly mit dem richtigen Header erstellen.
Laufzeit Verbrauch von Baugruppen
Lassen Sie uns überlegen, was passiert, wenn Sie sich jetzt Ihre halten Montage laufen. Zunächst identifiziert Windows es als DotNet von seinem Header und verwendet die CLR als eine Host-Umgebung dafür. Diese Umgebung wird aufgrund der Version von DotNet variieren, z. 2.0, 4.0, 4.5 usw. und auch für 32 oder 64 bit. Die Umgebung wird dann beginnen, nativen ausführbaren Code von Ihrer MSIL-Assembly zu generieren und mit der Ausführung zu beginnen.
Jetzt rufen alle Anwendungen dann andere Baugruppen auf (mindestens System/mscorlib). Die CLR wird ihr Bestes tun, um sicherzustellen, dass die richtige Version von ihnen geladen wird. Dies kann von ihrem installierten Speicherort (z. B. C: \ Windows \ Microsoft.Net \ Framework ...), dem GAC (einschließlich NGEN-Versionen) sein. oder aus dem aktuellen Verzeichnis der Anwendungen (siehe How the runtime locates assemblies). Manchmal wird dieser Prozess fehlschlagen, weil er zum Beispiel keine benötigte Version einer Assembly finden kann (d. H. V1.0 nur finden kann, wenn er v2.0 benötigt) oder er findet ein 64bit, wenn er ein 32bit benötigt.
Producing Anwendungen
Zurück in Visual Studio gibt es etwas, das die meisten Menschen vermissen. Es heißt Konfigurationsmanager und ist am unteren Rand des Dropdown-Menüs Lösungskonfigurationen in der Standardsymbolleiste verborgen.
Es bietet uns im Grunde eine Möglichkeit, die verschiedenen Geschmacksrichtungen für alle Baugruppen auszuwählen, die wir erstellen. Zum Beispiel ist hier ein Standard Debug AnyCPU Build.
Am oberen Rand des Dialog gibt es zwei Tropfen Tiefen, lässt die zweite, die Sie die Active-Plattform auszuwählen.
Aber niemand weiß, über Konfigurationsmanager
Ich nehme an, das Problem der meisten Menschen wissen nicht, diesen Dialog ist und so statt, wenn sie ein 64-Bit-Build erstellen wollen, werden sie in der Regel in jedes Projekt gehen und ändere den AnyCPU Build auf x64. In den letzten 10 Jahren habe ich noch nie eine Codebasis gefunden, die 64bit unterstützt, wo jemand das nicht getan hat.
Beachten Sie auch, dass es eine spezielle Konfiguration gibt, die als gemischte Plattformen bezeichnet werden kann. Es soll eine Lösung behandeln, bei der Sie entweder eine native (z. B. C++) Assembly sowie Ihr DotNet haben oder wenn Sie auf mehrere Plattformen wie Telefon und Desktop abzielen. Es kann auch produziert erhalten, wenn Sie Ihre 32bit mischen, 64but und AnyCPU usw.
Empfehlungen
Stattdessen empfehle ich Ihnen die folgenden tun,
- in Konfigurations-Manager gehen und alle Plattform entfernen Konfigurationen, die Sie nicht verwenden. Im Idealfall zurück zu nur Debug und Release for AnyCPU. Verwenden Sie Bearbeiten ... in den Dropdown-Listen, wählen Sie dann aus und klicken Sie auf Entfernen.
- Erstellen Sie eine neue Plattform, indem Sie Neu ... aus dem Dropdown-Menü der Plattform auswählen. Kopieren Sie es von AnyCPU.
- Jetzt zum Spaßstückchen, gehen durch jedes Projekt, das Sie haben, und für jede Plattform sicherzustellen, dass es die richtige Plattform Ziel baut.
Und schließlich Gebäude
Sie können nun Ihre Code-Basis in eine von drei Arten
- Verwenden Sie den Konfigurationsmanager wechseln Ihre aktive Plattform und drücken Sie F5 bauen.
- Verwenden Sie das Batch-Build-Dialogfeld (unten im Menü Build), um die Plattformen zu erstellen, die Sie erstellen möchten.
- Oder verwenden Sie die devenv Befehlszeile
devenv.com myApp.sln /build "Debug|AnyCPU"
Ausgezeichnete Antwort, genau was benötigt wurde. –