Pergunta

Eu estou usando MSBuild (via NAnt ) para compilar um monte de VB.NET assembléias. Porque estes conjuntos dependem COM Interop, eu preciso garantia de que eles executado no modo de 32 bits no Mac OS de 64 bit. Posso obter os conjuntos de executáveis ??para compilar a 32-bit, alterando o projeto no Visual Studio, mas eu realmente gostaria de ser capaz de forçar todos os executáveis ??a ser compilado para o modo de 32 bits no servidor de compilação.

Eu tentei uma série de parâmetros de linha de comando para MSBuild sem sorte:

  • / p: Plataforma = win32
  • / p: Plataforma = x86
  • / p: ProcessorArchitecture = x86

O que estou fazendo de errado? Existe alguma referência às propriedades que MSBuild usa ao compilar projetos VB?

Foi útil?

Solução

Se os próprios conjuntos são sempre vai ser de 32 bits, porque não adicionar a configuração para o arquivo .vbproj? Isso vai levar MSBuild fora da equação.

Apenas adicione a seguinte linha ao PropertyGroup inicial no arquivo .vbproj

<PlatformTarget>x86</PlatformTarget>

Outras dicas

De acordo com a MSDN , você está fazendo a coisa certa. Looks como /p:Platform=x86, mas na verdade, talvez seja /p:PlatformTarget=x86.

Tente apenas invocar MSBuild diretamente com esse parâmetro (certifique-se que não é um problema com seu arquivo NAnt. Olhe para a saída da compilação para a configuração de compilação direita ( Debug / Release ).

Apenas no caso de isso ajuda, eu usei essa linha de comando para construir o meu alvo plataforma x86:

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

No Solution Explorer, clique direito no nó raiz -> Configuration Manager . Você precisa definir uma configuração de toda a solução que instrui cada projeto dentro de construção como de 32 bits. (Nota: você provavelmente já tem um, se você já definir pelo menos um projeto de construção como de 32 bits.) Para uma explicação passo-a-passo, consulte o post no blog MSDN Solução Configurações .

Em seguida, você especifica a "plataforma" desejado e "sabor" na sua Criar Equipe arquivos .proj / .targets. Por exemplo:

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

Você pode especificar mais de uma dessas seções de propriedade de ter várias combinações construídas. Eu copiar / colar o "Release | x86". String (ou seja o que parece) diretamente do seu arquivo .sln para garantir que ele corresponda exatamente - você não pode obtê-lo diretamente do Solution Explorer

No que diz respeito o seu comentário:

MSBuild avaliação da propriedade é bastante complexa, uma vez que mistura os estilos declarativas e imperativas. Veja o post MSBuild Avaliação da Propriedade para mais detalhes. Eu prefiro não depender de suas sutilezas.

É verdade que as propriedades especificadas na linha de comando deve substituir tudo o mais, mas Criar Equipe tem outra camada de complexidade. A tarefa ComputeConfigurationList é chamado repetidamente através de uma invocação MSBuild recursiva, não como uma tarefa comum. A forma como ele puxa esta fora é levar as propriedades comuns como PlatformToBuild e envolvê-los em um conjunto de propriedades globais chamado ConfigurationToBuild.PlatformToBuild (etc.), que são gerados em tempo real, uma vez para cada configuração. Isso faz com que o motor Team Build muito mais flexível internamente, mas também torna hackear o comportamento linha de comando que você quer mais.

Você pode tentar definir ConfigurationToBuild.PlatformToBuild na linha de comando diretamente - ela pode funcionar, eu não tenho certeza. Mas definitivamente vai impedir que você nunca construir mais de uma configuração em uma única definição de compilação. Por esta razão, eu estou furando com meu conselho acima.

Depois de experimentar exatamente o mesmo problema, eu mudei de utilizar a versão do MSBuild em C:\WINDOWS\Microsoft.NET\Framework64 ... para a versão em C:\WINDOWS\Microsoft.NET\Framework (sem 64) e as coisas compilado apenas multa.

Para MSBuild versão 15 é / P: PlatformTarget = x86

A resposta Nant msbuild-Task a esta pergunta:

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

A maneira mais prática que eu uso para encontrar o direito de propriedade é de um dos projetos .csproj abertura arquivo (no caso de c #) e ver a propriedade que é afetado quando você seleciona "x64" / "AnyCPU" / "x86" a partir do Visual stdio. Qualquer que seja propriedade que é alterada, você precisa definir que a partir de linha de comando. Com o Visual Studio 2015 parece ser . Então você pode chamar msbuild com o argumento / p:. Plataforma = x64 e ele deve funcionar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top