Frage

Ich bin mit MSBuild (via NAnt ) ein Bündel von VB.NET Baugruppen. Da diese Baugruppen auf COM-Interop abhängen, muss ich sicherstellen, dass sie auf 64-Bit-Betriebssystemen in 32-Bit-Modus ausgeführt werden. Ich kann die ausführbaren Baugruppen erhalte auf 32-Bit zu kompilieren, indem das Projekt in Visual Studio zu ändern, aber ich würde wirklich in der Lage sein mag alle die ausführbaren Dateien zu zwingen, auf 32-Bit-Modus auf dem Build-Server erstellt werden.

Ich habe kein Glück zu MSBuild eine Reihe von Befehlszeilenparametern versucht:

  • / p: Platform = win32
  • / p: Plattform = x86
  • / p: = x86 Processor

Was mache ich falsch? Gibt es einen Bezug auf die Eigenschaften, die MSBuild verwendet, wenn VB Projekte Kompilieren?

War es hilfreich?

Lösung

Wenn die Baugruppen selbst werden immer 32 Bit sein, warum nicht die Einstellung der .vbproj Datei hinzufügen? Das wird dauern MSBuild aus der Gleichung heraus.

Fügen Sie einfach die folgende Zeile in die Anfangsproperty in der .vbproj Datei

<PlatformTarget>x86</PlatformTarget>

Andere Tipps

Nach MSDN , tun Sie das Richtige. Sieht aus wie /p:Platform=x86, aber eigentlich, vielleicht ist es /p:PlatformTarget=x86.

Versuchen

nur MSBuild aufrufen, direkt mit diesem Parameter (stellen Sie sicher, es ist nicht ein Problem mit Ihrem NAnt Datei. Schauen Sie sich die Build-Ausgabe für den richtigen Build-Konfiguration ( Debug / Mitteilung ).

Für den Fall, das hilft, ich dieses Kommandozeilen verwendet, um meine x86-Plattform Ziel zu bauen:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86

Im Projektmappen Explorer mit der rechten klicken Sie auf den Wurzelknoten -> Configuration Manager . Sie benötigen eine Lösung weite Konfiguration zu definieren, die jedes Projekt als 32-Bit zu bauen innerhalb anweist. (Anmerkung:. Sie wahrscheinlich schon eine haben, wenn Sie jemals mindestens ein Projekt zu bauen, wie 32-Bit gesetzt haben) Für eine Schritt-für-Schritt-Anleitung finden Sie in der MSDN Blog-Post Lösung Konfigurationen .

Dann geben Sie die gewünschte „Plattform“ und „Geschmack“ in Ihrer Teamzusammenstellung .proj / .targets Dateien. Zum Beispiel:

<ConfigurationToBuild Include="Release|x86">
    <FlavorToBuild>Release</FlavorToBuild>
    <PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>

Sie können angeben, mehr als eine dieser Eigenschaft Abschnitte gebaut mehrere Kombinationen zu haben. Ich würde copy / paste die „Release | x86“. String (oder was auch immer es aussieht) Datei direkt von Ihrem .sln es, um sicherzustellen, passt genau - Sie es nicht direkt aus der Lösung Explorer bekommen

In Bezug auf Ihre Bemerkung:

MSBuild Immobilienbewertung ist ziemlich komplex, da es deklarative und zwingend notwendig Stile mischt. Sehen Sie sich die Blog-Post MSBuild Objektbewertung für Details. Ich möchte nicht auf ihre Feinheiten verlassen.

Es stimmt, dass in der Befehlszeile angegebenen Eigenschaften alles andere außer Kraft setzen sollte, aber Team Build eine weitere Ebene der Komplexität hat. Die ComputeConfigurationList Aufgabe wiederholt aufgerufen wird über eine rekursive MSBuild Invokation, nicht als eine gewöhnliche Aufgabe . Die Art und Weise dies aus zieht ist die gewöhnlichen Eigenschaften wie PlatformToBuild zu nehmen und wickeln Sie sie in einer Reihe von globalen Eigenschaften genannt ConfigurationToBuild.PlatformToBuild (usw.), die im laufenden Betrieb erzeugt werden, einmal für jede Konfiguration. Das macht das Team Build-Engine viel flexibler intern, aber es macht auch die Befehlszeile Verhalten Hacking Sie härter werden soll.

Sie könnten versuchen, ConfigurationToBuild.PlatformToBuild auf der Kommandozeile Einstellung direkt - es könnte funktionieren, ich bin nicht sicher. Aber es wird auf jeden Fall verhindern, dass jemals mehr als eine Konfiguration in einer einzigen Builddefinition zu bauen. Aus diesem Grunde ich bleibe mit meinem Rat oben.

Nach dem exakt gleichen Problem auftritt, wechselte ich von der Nutzung der Version von MSBuild bei C:\WINDOWS\Microsoft.NET\Framework64 ... auf die Version bei C:\WINDOWS\Microsoft.NET\Framework (keine 64) und Dingen zusammengestellt gut.

Für MSBuild Version 15 ist / P: PlatformTarget = x86

Die Nant msbuild-Task-Antwort auf diese Frage:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>

Eine praktische Art, wie ich die richtige Immobilie zu finden, verwenden ist von einem des CSPROJ Projektes öffnen  Datei (im Fall von c #) und die Eigenschaft sehen, die betroffen ist, wenn Sie „x64“ / „AnyCPU“ / „x86“ aus Visual stdio. Was auch immer Eigenschaft, die geändert wird, müssen Sie diese Option setzen von der Kommandozeile. Mit Visual Studio 2015 scheint es, zu sein. So können Sie msbuild mit dem Argument aufrufen / p. Platform = x64 und es sollte funktionieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top