Domanda

Sto usando MSBuild (via NAnt ) per compilare un gruppo di VB.NET assiemi. Perché questi gruppi dipendono COM Interop, ho bisogno di garantire che corrono in modalità a 32 bit a 64 bit OS. Posso ottenere le assemblee eseguibili per la compilazione a 32 bit modificando il progetto in Visual Studio, ma mi piacerebbe davvero essere in grado di costringere tutti gli eseguibili da compilare in modalità a 32 bit sul server di build.

Ho provato un certo numero di parametri della riga di comando per MSBuild senza fortuna:

  • / p: Piattaforma = win32
  • / p: Piattaforma = 86
  • / p: ProcessorArchitecture = 86

Che cosa sto facendo di sbagliato? C'è qualche riferimento alle proprietà che MSBuild utilizza durante la compilazione progetti VB?

È stato utile?

Soluzione

Se le assemblee stesse sono sempre sarà a 32 bit, perché non aggiungere l'impostazione al file .vbproj? Che si terrà MSBuild fuori dall'equazione.

Basta aggiungere la seguente riga alla PropertyGroup iniziale nel file di vbproj

<PlatformTarget>x86</PlatformTarget>

Altri suggerimenti

MSDN , si sta facendo la cosa giusta. Sembra che /p:Platform=x86, ma in realtà, forse è /p:PlatformTarget=x86.

Prova a solo invocare MSBuild direttamente con il parametro (assicurarsi che non è un problema con il file NAnt. Guardate l'uscita di generazione per il configurazione di generazione destra ( Debug / di uscita ).

Nel caso in cui questo aiuta, ho usato questo comando per costruire il mio obiettivo piattaforma x86:

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

In Solution Explorer, fare clic destro sul nodo principale -> Configuration Manager . È necessario definire una configurazione di soluzione a livello che indica ogni progetto all'interno di costruire a 32 bit. (Nota:. Probabilmente hai già uno, se hai mai impostato almeno un progetto per la costruzione di 32-bit) Per una guida step-by-step, vedere il post sul blog MSDN configurazioni della soluzione .

Poi, si specifica la "piattaforma" desiderata e "sapore" della tua Team Build .proj / .targets file. Ad esempio:

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

È possibile specificare più di una di queste sezioni di proprietà di avere diverse combinazioni costruite. Vorrei copiare / incollare il "Release | X 86". Stringa (o quello che sembra) direttamente dal tuo .sln file per assicurarsi che corrisponda esattamente - non si può ottenere direttamente da Esplora soluzioni

Per quanto riguarda il tuo commento:

MSBuild valutazione di proprietà è piuttosto complesso in quanto mescola stili dichiarativi e imperativi. Vedere il post sul blog valutazione MSBuild Proprietà per i dettagli. Preferisco non fare affidamento sulle sue sottigliezze.

E 'vero che le proprietà specificate nella riga di comando dovrebbero ignorare tutto il resto, ma Team Build ha un altro livello di complessità. Il compito ComputeConfigurationList si chiama ripetutamente tramite un ricorsiva invocazione MSBuild, non come un compito normale . Il modo in cui si tira fuori questo è quello di prendere le proprietà comuni come PlatformToBuild e avvolgerli in un insieme di proprietà globali chiamati ConfigurationToBuild.PlatformToBuild (ecc) che vengono generati al volo, una volta per ogni configurazione. Questo rende il motore di generazione squadra molto più flessibile internamente, ma rende anche l'hacking il comportamento riga di comando che si desidera di più.

Si potrebbe provare a impostare <=> sulla riga di comando direttamente - potrebbe funzionare, non sono sicuro. Ma sarà sicuramente impedire di costruire mai più di una configurazione in un'unica definizione di compilazione. Per questo motivo, sto attaccando con il mio consigli di cui sopra.

Dopo aver sperimentato lo stesso problema esatto, sono passato di utilizzare la versione di MSBuild a C:\WINDOWS\Microsoft.NET\Framework64 ... per la versione a C:\WINDOWS\Microsoft.NET\Framework (senza 64) e le cose compilato bene.

Per MSBuild versione 15 si è / P: PlatformTarget = 86

La risposta Nant MSBuild-Task a questa domanda:

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

Un modo più pratico io uso per trovare la giusta proprietà è aprendo uno dei progetti .csproj  file (in caso di C #) e vedere la proprietà che è influenzato quando si seleziona "x64" / "AnyCPU" / "X 86" da Visual stdio. Qualunque sia la proprietà che è cambiato, è necessario impostare che da linea di comando. Con Visual Studio 2015 sembra essere . Così si può richiamare msbuild con l'argomento / p:. Piattaforma = x64 e dovrebbe funzionare

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top