Como faço para compilar um projeto do Visual Studio a partir da linha de comando?

113

Estou fazendo o script do ciclo de checkout, construção, distribuição, teste e confirmação para uma grande solução C ++ que usa Monotone , CMake , Visual Studio Express 2008 e testes personalizados.

Todas as outras partes parecem bastante diretas, mas não vejo como compilar a solução do Visual Studio sem obter a GUI.

O script é escrito em Python, mas uma resposta que me permitisse apenas fazer uma chamada para: os.system bastaria.

John Mulder
fonte

Respostas:

116

Eu conheço duas maneiras de fazer isso.

Método 1
O primeiro método (que eu prefiro) é usar msbuild :

msbuild project.sln /Flags...

Método 2
Você também pode executar:

vcexpress project.sln /build /Flags...

A opção vcexpress retorna imediatamente e não imprime nenhuma saída. Suponho que seja isso que você deseja para um roteiro.

Observe que o DevEnv não é distribuído com o Visual Studio Express 2008 (passei muito tempo tentando descobrir isso quando tive um problema semelhante pela primeira vez).

Portanto, o resultado final pode ser:

os.system("msbuild project.sln /p:Configuration=Debug")

Você também vai querer ter certeza de que suas variáveis ​​de ambiente estão corretas, já que msbuild e vcexpress não estão por padrão no caminho do sistema. Inicie o ambiente de compilação do Visual Studio e execute seu script a partir daí ou modifique os caminhos em Python (com os.putenv ).

Moses Schwartz
fonte
Isso também se aplica ao Visual Studio 2010 Express.
Samuel Harmer,
msbuild não parece estar sendo distribuído com o VS 2008
Lucky Luke
46

O MSBuild geralmente funciona, mas já tive dificuldades antes. Você pode ter melhor sorte com

devenv YourSolution.sln /Build 
Jeffrey Hantin
fonte
MSBuild não funciona com projetos Visual Fortran (* .vfproc). Obrigado por me apontar para devenv, o que faz.
Maik Beckmann
Estou tendo que usar: devenv YourSolution.sln / Build, mas funcionou muito bem, obrigado.
bobwah
7
Você também pode especificar a configuração:devenv YourSolution.sln /Build Debug
Josh Stribling
Funciona bem. Também é possível reconstruir usando o comando abaixodevenv YourSolution.sln /rebuild
Abhineet
1
Também é possível reconstruir para o modo de liberação ou depuração apenas acrescentando depuração ou liberação após um espaço. Por exemplo: devenv YourSolution.sln /rebuild releaseoudevenv YourSolution.sln /rebuild debug
Abhineet de
21

Para ser honesto, tenho que adicionar meus 2 centavos.

Você pode fazer isso com msbuild.exe . Existem muitas versões do msbuild.exe .

C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe

Use a versão que você precisa. Basicamente, você deve usar o último.

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

Então, como fazê-lo.

  1. Execute a janela COMMAND

  2. Insira o caminho para msbuild.exe

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

  1. Insira o caminho para a solução do projeto como

"C: \ Users \ Clark.Kent \ Documents \ visual studio 2012 \ Projects \ WpfApplication1 \ WpfApplication1.sln"

  1. Adicione todos os sinalizadores necessários após o caminho da solução.

  2. Pressione ENTER

Observe que você pode obter ajuda sobre todos os sinalizadores possíveis, como

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe / help

Desenvolvedor
fonte
6
Eu realmente gosto de como você adicionou os detalhes para novos desenvolvedores, como onde encontrar o msbuild etc.
Ayushmati
9

Usar msbuildconforme apontado por outros funcionou para mim, mas eu precisava fazer um pouco mais do que apenas isso. Primeiro de tudo, msbuildprecisa ter acesso ao compilador. Isso pode ser feito executando:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"

Então msbuildnão estava em meu $ PATH, então tive que executá-lo por meio de seu caminho explícito:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" myproj.sln

Por fim, meu projeto estava fazendo uso de algumas variáveis ​​como $(VisualStudioDir). Parece que eles não são configurados por, msbuildentão tive que configurá-los manualmente através da /propertyopção:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /property:VisualStudioDir="C:\Users\Administrator\Documents\Visual Studio 2013" myproj.sln

Essa linha finalmente me permitiu compilar meu projeto.

Bônus : parece que as ferramentas de linha de comando não exigem registro após 30 dias de uso, como faz a edição "gratuita" da Comunidade do Visual Studio baseada em GUI. Com o requisito de registro da Microsoft em vigor, essa versão dificilmente é gratuita. Grátis no Facebook, se houver alguma coisa ...

Josch
fonte
4

MSBuild é seu amigo.

msbuild "C:\path to solution\project.sln"
Adam Davis
fonte
1
Já vi essa falha em situações estranhas devido às diferenças em como o MSBuild e o DevEnv processam os arquivos .sln.
Jeffrey Hantin
3

DEVENV funciona bem em muitos casos, mas em um WIXPROJ para construir meu instalador WIX, tudo o que obtive é o erro "CATASTROPHIC" no log de saída.

Isso funciona: MSBUILD /Path/PROJECT.WIXPROJ / t: Build / p: Configuration = Release

peter.cyc
fonte