Eu quero a linha de comando para construir um projeto específico de uma solução usando msbuild como fazemos com devenv.com.In devenv.com, podemos especificar um projeto de uma solução usando a seguinte linha de comando
devenv.com /Build Release|x86 test.sln /project "testproject"
Usando a linha de comando acima, posso construir o testproject no test.sln usando devenv.com.What é a linha de comando para msbuild para a mesma solução.
obrigado
Respostas:
Observe que o que é atribuído
/t
é o nome do projeto na solução, ele pode ser diferente do nome do arquivo do projeto.Além disso, conforme declarado em Como: Criar destinos específicos em soluções usando MSBuild.exe :
Você também pode construir vários projetos de uma vez:
Para reconstruir ou limpar, mude
/t:project
para/t:project:clean
ou/t:project:rebuild
fonte
/t
parâmetro para cada projeto a ser construído:msbuild test.sln /t:project /t:project2
/t:SlnFolder\My_Project_name
.O MSBuild realmente funciona por meio do uso de projetos, não da solução. A solução é usada apenas para analisá-lo em um arquivo de projeto temporário no MSBuild internamente. Você deve ser capaz de construir o projeto de interesse diretamente por meio do MSBuild executando o seguinte comando.
Há um grande problema que eu sei que você pode encontrar usando o projeto diretamente em vez da solução: se você usar a solução para expressar dependências entre os projetos, em vez de adicionar as referências ao projeto e deixar o sistema de compilação resolver as dependências automaticamente .
Se você está impondo uma ordem de construção usando o arquivo sln, recomendo trabalhar essas dependências diretamente nos arquivos proj e removê-los do sln. Isso permitirá que você invoque qualquer arquivo proj do MSBuild diretamente e os projetos serão todos construídos de forma independente, sem nenhum trabalho adicional. Você realmente deve tratar o arquivo sln como um grupo de projetos para facilitar o trabalho no Visual Studio e não como uma entrada de compilação.
fonte
Postando como informação para futuros buscadores
Adicione o seguinte ao script de construção e execute-o uma vez. Isso irá gerar os alvos exatos e outras informações que o msbuild realmente usará.
Ex: Se você tiver
.
no nome do projeto ou nas pastas, o msbuild irá esperar_
no lugar do.
.Depois de obter as informações, atualize o script de construção com os detalhes necessários.
fonte
Para fazer isso, você precisa saber qual é o nome-alvo do projeto , não necessariamente o nome do projeto.
Uma maneira de descobrir isso é usar o MSBuild em seu SLN com os parâmetros pretendidos após definir uma variável de ambiente especial chamada
MSBuildEmitSolution
com o valor de1
.Recentemente, tive que fazer isso devido a um nome muito específico para um destino em diretórios aninhados. Então, em meu arquivo gerado,
my_stuff.sln.metaproj
encontrei esta linha:<Target Name="Utils\Firewall\FirewallUtils:Rebuild">
Isso significa que a linha de comando a ser usada acaba sendo,
fonte
.csproj
no meu caso). I <3 ASSIM!Apenas para adicionar informações adicionais, a execução de msbuild na pasta do projeto irá, por padrão, construir o arquivo do projeto, já que é o único lá.
Existem muitas variações de uso do msbuild dessa maneira. Você pode especificar o arquivo proj diretamente.
Revise a documentação do msbuild para uso, requisitos de arquivo proj, bem como os benefícios de construir o projeto em vez da solução.
Documentação MS MSBuild
Há benefícios em construir desta forma, conforme mencionado pelo ferreiro acima.
fonte