Question

J'utilise MSBuild (via NAnt) pour compiler un tas de VB.NET assemblées. Parce que ces assemblées dépendent COM Interop, je dois garantir qu'ils fonctionnent en mode 32 bits sur 64 bits OS. Je peux obtenir les ensembles exécutables pour compiler à 32 bits en modifiant le projet dans Visual Studio, mais je voudrais vraiment être en mesure de forcer tous les executables être compilé à mode 32 bits sur le serveur de build.

J'ai essayé un certain nombre de paramètres de ligne de commande à MSBuild sans chance:

  • / p: Plate-forme = win32
  • / p: la plate-forme x86 =
  • / p: ProcessorArchitecture = x86

Qu'est-ce que je fais mal? Y at-il une référence aux propriétés que MSBuild utilise lors de la compilation des projets de VB?

Était-ce utile?

La solution

Si les assemblées elles-mêmes vont toujours être 32 bits, pourquoi ne pas ajouter le paramètre au fichier .vbproj? Cela prendra MSBuild de l'équation.

Il suffit d'ajouter la ligne suivante à la PropertyGroup initiale dans le fichier .vbproj

<PlatformTarget>x86</PlatformTarget>

Autres conseils

Selon MSDN , vous faites la bonne chose. On dirait que /p:Platform=x86, mais en fait, peut-être est /p:PlatformTarget=x86.

Essayez de simplement appeler MSBuild directement avec ce paramètre (assurez-vous qu'il est pas un problème avec votre fichier NAnt. Regardez la sortie de génération pour la bonne configuration de construction ( Debug / Libération ).

Juste au cas où cette aide, je cette ligne de commande pour construire ma cible de plate-forme x86:

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

Dans l'Explorateur de solutions, cliquez droit sur le nœud racine -> Configuration Manager . Vous devez définir une configuration de solution à l'échelle qui indique chaque projet au sein de construire en 32 bits. (Note:. Vous avez probablement déjà un si vous avez déjà au moins un jeu projet de construction de 32 bits) Pour une procédure pas à pas, étape par étape, consultez le blog MSDN Configurations Solution .

Ensuite, vous spécifiez le réglage « plate-forme » et « saveur » dans votre équipe Construire .proj /. .targets Par exemple:

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

Vous pouvez spécifier plusieurs de ces sections de la propriété d'avoir plusieurs combinaisons construites. Je copier / coller le « Release | x86 ». Chaîne (ou quoi que ce ressemble) directement à partir de votre fichier pour vous assurer .sln qu'il correspond exactement à - vous ne pouvez pas l'obtenir directement à partir de l'Explorateur de solutions

En ce qui concerne votre commentaire:

MSBuild évaluation de la propriété est assez complexe car il mélange les styles déclaratifs et impératifs. Voir le blog MSBuild L'évaluation des biens pour plus de détails. Je préfère ne pas se fier à ses subtilités.

Il est vrai que les propriétés spécifiées sur la ligne de commande doivent remplacer tout le reste, mais Team Build a une autre couche de complexité. La tâche ComputeConfigurationList est appelée à plusieurs reprises via un invokation MSBuild récursive, non pas comme une tâche ordinaire. La façon dont il tire cette large est de prendre les propriétés ordinaires comme les envelopper et PlatformToBuild dans un ensemble de propriétés globales appelées ConfigurationToBuild.PlatformToBuild (etc.) qui sont générés à la volée, une fois pour chaque configuration. Cela rend le moteur de Team Build beaucoup plus flexible en interne, mais elle rend aussi le comportement de piratage de ligne de commande que vous voulez plus difficile.

Vous pouvez essayer de régler sur la ligne <=> de commande directement - il pourrait fonctionner, je ne suis pas sûr. Mais il vous empêchera certainement de jamais construire plus d'une configuration dans une définition unique de construction. Pour cette raison, je suis coller avec mes conseils ci-dessus.

Après avoir connu exactement le même problème, je suis passé d'utiliser la version de MSBuild à C:\WINDOWS\Microsoft.NET\Framework64 ... à la version à C:\WINDOWS\Microsoft.NET\Framework (pas 64) et les choses très bien compilé.

Pour la version 15 MSBuild il est / P: PlatformTarget = x86

La réponse Nant-msbuild Tâche à cette question:

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

Une façon plus pratique j'utiliser pour trouver la bonne propriété est en ouvrant l'un des projets .csproj  déposer (en cas de c #) et de voir la propriété qui est affecté lorsque vous sélectionnez « x64 » / « AnyCPU » / « x86 » à partir de Visual stdio. Quelle que soit la propriété qui a changé, vous devez définir cette ligne de commande. Avec Visual Studio 2015, il semble être . Ainsi, vous pouvez invoquer msbuild avec l'argument / p. Plate-forme = x64 et il devrait travailler

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top