2014-02-19 3 views
5

Wenn ich gehen Eigenschaften eines C# Console Application zu projizieren, wird seine Platform immer auf Active(x86) gesetzt, wo Platform targetx64 ist, wie in der img gezeigt:Console App-Plattform immer "Aktiv (x86)"

enter image description here

Kann jemand sagen, was der Unterschied ist und wie man eine App erstellt, deren Platformx64 ist.

Antwort

8

Microsoft hat ein paar drastische Konstruktionsfehler in VS2010 gemacht, dies ist einer von ihnen. Der Platform-Name für verwaltete Projekte war immer "AnyCPU". Es ist wieder in V2012 und höher. Aber der Standardname in VS2010 ist "x86".

Das war eine schreckliche Wahl, da der Platform-Name für ein verwaltetes Projekt völlig irrelevant ist. Verwalteter Code kann auf jeder Plattform ausgeführt werden, es ist der Just-In-Time-Compiler, der die vom Compiler generierte MSIL automatisch in Maschinencode konvertiert. Zur Laufzeit keine Zeit aufbauen. Also "AnyCPU" ist ein viel aussagekräftigerer Name, der Jitter wirklich macht es auf "jeder CPU" laufen lassen.

Dieser vorübergehende Fehler des guten Denkens wurde durch eine signifikante Änderung des C++ - Projektmodells ausgelöst. VS2010 ist die erste Version von Visual Studio, in der C- und C++ - Projekte mit MSBuild anstelle der in früheren Versionen verwendeten benutzerdefinierten Build-Engine (VCBuild) erstellt werden. Die Projektauswahl ist eine wirklich große Sache für solche Projekte, sie wählt den Compiler aus, der zum Kompilieren des Quellcodes verwendet wird. Unterschiedliche CPUs erfordern unterschiedliche Compiler, da C++ - Code direkt in Maschinencode übersetzt wird.

Also einfach ignorieren, der Name ist egal. Und vor allem hat es keinerlei Auswirkungen auf das, was der Jitter tut. Das erfordert eine andere Einstellung, wenn Sie es zwingen möchten, nur 32-Bit-Code zu generieren. Du hast die Einstellung gefunden, die das tut.

+0

Ausgezeichnete Antwort, genau was benötigt wurde. –

1

Die Plattform bezieht sich auf, wenn Sie das Projekt auf x86 kompilieren/erstellen möchten, das ist 32Bit-Architektur oder x64, die 64-Bit-Architektur ist. 64-Bit-App läuft auf 64-Bit-Architektur, während 32-Bit-App auf 64/32 Bit-Architektur,

in Bezug auf, wie Sie eine x64-App erstellen können, wählen Sie einfach x64 in Ihrem Konfigurationsmanager. Ausführliche Erläuterungen finden Sie im folgenden Dokument. http://visualstudiohacks.com/articles/visual-studio-net-platform-target-explained/

+0

sich die Frage nicht beantworten, ich habe Angst. –

+0

@BabuJames überprüfen Sie die Antwort Ich aktualisierte es –

1

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. Selecting a build configuration

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.

Configuration Manager

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.

Create a new platform

  • 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"