Estou tentando usar o MSBuild para criar uma solução com uma plataforma de destino especificada (preciso de binários, x86 e x64). Foi assim que tentei:
C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
No entanto, a construção sempre falha se a plataforma for diferente de "Qualquer CPU". O que estou fazendo de errado?
Este é o momento em que o MSBuild imprime:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t: Reconstruir / p: Configuração = Release / p: Platform = "x86" Versão do Microsoft Build Engine 3.5.30729.1 [ Microsoft .NET Framework, versão 2.0.50727.3082] Copyright (C) Microsoft Corporation 2007. Todos os direitos reservados.
Compilação iniciada em 1.7.2010 8:28:10. Projeto "SolutionPath \ Solution.sln" no nó 0 (reconstruir as tarifas t). SolutionPath \ Solution.sln: erro MSB4126: A configuração da solução especificada "Release | x86" é inválida. Especifique uma configuração de solução válida usando as propriedades de Configuração e plataforma (por exemplo, MSBuild.exe Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") ou deixe essas propriedades em branco para usar a configuração padrão da solução. Projeto de construção concluído "SolutionPath \ Solution.sln" (reconstruir o (s) alvo (s)) - FAILED.
Falha na construção.
"SolutionPath \ Solution.sln" (destino de reconstrução) (1) -> (destino ValidateSolutionConfiguration) -> SolutionPath \ Solution.sln: erro MSB4126: A configuração de solução especificada "Release | x86" é inválida. Especifique uma configuração de solução válida usando as propriedades de Configuração e plataforma (por exemplo, MSBuild.ex e Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") ou deixe essas propriedades em branco para usar a configuração padrão da solução.
0 Warning(s) 1 Error(s)
Tempo decorrido 00: 00: 00.03
Se eu tentar compilar para x86 / x64 com o devenv, ele funcionará perfeitamente, no entanto, estou tentando configurar um servidor de compilação sem instalar todas as versões necessárias do Visual Studio. A propósito, se houver uma ferramenta gratuita melhor (que suporte o .NET framework 4) por aí, eu adoraria ouvir sobre isso.
Win32
enquanto moden.NET usax86
Respostas:
Se você deseja criar sua solução para x86 e x64 , sua solução deve ser configurada para ambas as plataformas. Na verdade, você apenas tem uma configuração Qualquer CPU .
Como verificar a configuração disponível para um projeto
Para verificar a configuração disponível para um determinado projeto, abra o arquivo do projeto (
*.csproj
por exemplo) e procure por umPropertyGroup
com o direitoCondition
.Se você deseja criar o
Release
modo parax86
, deve ter algo parecido com isto no seu arquivo de projeto:Como criar e editar a configuração no Visual Studio
(fonte: microsoft.com )
(fonte: msdn.com )
(fonte: msdn.com )
Como criar e editar a configuração (no MSDN)
fonte
Win32
vez de,x86
por exemplo, osCMake
geradoslibssh2
usam ( usosCMake
).No MSBuild ou Teamcity, use a linha de comando
ou use uma forma mais curta:
No entanto, você precisa configurar a plataforma em seu projeto, veja a resposta de Julien Hoarau.
fonte
Platform="Any CPU"
ouPlatform="Mixed Platforms"
para quem precisa.Se você estiver tentando fazer isso na linha de comando, poderá encontrar um problema em que uma variável de ambiente 'Platform' em toda a máquina está sendo configurada para você e trabalhando contra você. Eu posso reproduzir isso se eu usar a janela de comando do VS2012 em vez de uma janela de comando normal do Windows.
No prompt de comando, digite:
Em uma janela de comando do VS2012, tenho um valor predefinido de 'X64'. Isso parece interferir no que estiver no meu arquivo de solução.
Em uma janela de comando comum, o comando 'set' resulta em uma mensagem "variável não definida" ... o que é bom.
Se o resultado do seu comando 'set' acima não retornar nenhum valor de variável de ambiente, você deve estar pronto.
fonte
Para o VS2017 e 2019 ... com os modernos arquivos de projeto SDK da biblioteca principal , a plataforma pode ser alterada durante o processo de criação. Aqui está um exemplo para mudar para a
anycpu
plataforma, pouco antes daCoreCompile
tarefa interna ser executada:No meu caso, estou criando um FPGA com
BeforeTargets
eAfterTargets
tarefas, mas compilando um aplicativo C # principalmenteCoreCompile
. (em parte porque eu quero algum tipo de aplicativo de linha de comando e em parte porque não consegui descobrir como omitir ou substituirCoreCompile
)Para construir para vários binários, em simultâneo, como x86 e x64: qualquer um, a tarefa de compilação manual separado seria necessária ou dois arquivos de projeto em separado com o respectivo
<PlatformTarget>x86</PlatformTarget>
e<PlatformTarget>x64</PlatformTarget>
configurações no exemplo acima.fonte