Como posso programaticamente obter o caminho para o MSBuild de uma máquina em que meu .exe está sendo executado?
Posso obter a versão .NET do Environment, mas existe uma maneira de obter a pasta correta para uma versão .NET?
Revirando o registro, parece que
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
pode ser o que você procura; inicie o regedit.exe e dê uma olhada.
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\
Você também pode imprimir o caminho do MSBuild.exe na linha de comando:
fonte
/reg:32
ou/reg:64
nas duas testemunhascmd
(ou em qualquer processo que esteja executando) para obter explicitamente esse caminho.Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath
Se você quiser usar o MSBuild for .Net 4, poderá usar o seguinte comando do PowerShell para obter o caminho do executável. Se você deseja a versão 2.0 ou 3.5, basta alterar a variável $ dotNetVersion.
Para executar o executável, você precisará acrescentar a variável $ msbuild com &. Isso executará a variável.
fonte
$dotNetVersion
12.0 (vs 2013) e 14.0 (vs 2015) (se instalado, é claro)HKLM:\software\Microsoft\MSBuild\ToolsVersions
chave. Em vez disso, você precisa obter o dir de instalação do VS2017HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7\15.0
e anexáMSBuild\15.0\Bin\MSBuild.exe
-lo para obter o local do MSBuild EXE.Para scripts de shell do cmd no Windows 7, eu uso o seguinte fragmento no meu arquivo em lotes para encontrar o MSBuild.exe no .NET Framework versão 4. Presumo que a versão 4 esteja presente, mas não assuma a sub-versão. Isso não é totalmente de uso geral, mas, para scripts rápidos, pode ser útil:
Para meus usos, estou saindo do arquivo em lotes com um erro se isso não funcionar:
fonte
set bb.build.msbuild.exe=
? É necessário ou apenas um artefato de sua configuração?Você pode usar esse comando do PowerShell de avaliação para obter
MSBuildToolsPath
o registro.PowerShell (do registro)
Resultado
ou do sistema de arquivos
PowerShell (do sistema de arquivos)
Resultado
fonte
Instruções para encontrar o MSBuild :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
Instruções para encontrar o VSTest :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
(Observe que as instruções acima são ligeiramente modificadas das instruções oficiais da Microsoft. Em particular, incluí o
-prerelease
sinalizador para permitir que instalações de visualização e RC sejam selecionadas e-products *
para detectar instalações das Ferramentas de compilação do Visual Studio.)Demorou apenas dois anos, mas finalmente em 2019, a Microsoft ouviu e nos deu uma maneira de encontrar esses executáveis vitais ! Se você possui o Visual Studio 2017 e / ou 2019 instalado, o
vswhere
utilitário pode ser consultado quanto à localização de MSBuild et al. Comovswhere
sempre está localizado em%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
, não há mais bootstrapping nem caminho necessário para a codificação do caminho.A mágica é o
-find
parâmetro, adicionado na versão 2.6.2 . Você pode determinar a versão que você instalou executandovswhere
ou verificando suas propriedades do arquivo. Se você possui uma versão mais antiga, basta baixar a mais recente e substituir a existente%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
.vswhere.exe
é um executável independente, para que você possa baixá-lo e executá-lo de qualquer lugar com uma conexão à Internet. Isso significa que seus scripts de construção podem verificar se o ambiente em que estão executando está configurado corretamente, para citar uma opção.fonte
msbuild
na linha de comando (especialmente a linha de comando do Visual Studio, se estiver usando isso), essa será a que será usada. Para ver o que é usado se você digitarmsbuild
na linha de comando, faça o seguinte:where msbuild
. Se isso não está relatando o mesmo que o VSWHERE diz que o mais recente e o melhor é, então você precisa fazer um caminho completo para omsbuild.exe
que deseja usar ou fazer ajustes nas variáveis PATH para adequá-lo.O @AllenSanborn possui uma excelente versão do PowerShell, mas algumas pessoas precisam usar apenas scripts em lote para compilações.
Esta é uma versão aplicada do que o @ bono8106 respondeu.
msbuildpath.bat
build.bat
No Visual Studio 2017 / MSBuild 15, Aziz Atif (o cara que escreveu Elmah ) escreveu um script em lote
https://github.com/linqpadless/LinqPadless/blob/master/build.cmd
fonte
Isso funciona para o Visual Studio 2015 e 2017:
fonte
vswhere -products *
, conforme especificado em github.com/Microsoft/vswhere/wiki/Find-MSBuild .Os locais do registro
forneça o local para o executável.
Mas se você precisar do local onde salvar as extensões de tarefas, ele estará ativado
fonte
A maneira mais fácil pode ser abrir o PowerShell e inserir
fonte
Um one-liner baseado na resposta de @ dh_cgn :
(Resolve-Path ([io.path]::combine(${env:ProgramFiles(x86)}, 'Microsoft Visual Studio', '*', '*', 'MSBuild', '*' , 'bin' , 'msbuild.exe'))).Path
Ele seleciona todos os caminhos existentes, por exemplo.
C:\Program Files (x86)\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe
.As estrelas curingas são:
Esteja ciente de que este comando está selecionando o primeiro caminho que corresponde à expressão ordenada por alfabeto. Para reduzi-lo, substitua os curingas por elementos específicos, por exemplo. o ano ou a versão das ferramentas.
fonte
No Windows 2003 e posterior, digite este comando no cmd:
Se nada aparecer, significa que o .NET framework não está incluído no PATH do sistema. O MSBuild deve estar na pasta de instalação do .NET, juntamente com os compiladores do .NET (vbc.exe, csc.exe)
fonte
A partir do MSBuild 2017 (v15), o MSBuild agora está instalado em uma pasta em cada versão do Visual Studio
Aqui estão alguns exemplos de onde o MSBuild.exe é encontrado na minha máquina:
fonte
Para recuperar o caminho do msbuild 15 (Visual Studio 2017) com lote do registro sem ferramentas adicionais:
Melhores ferramentas disponíveis:
fonte
Você não acha que há muito a acrescentar aqui, mas talvez seja hora de uma maneira unificada de fazer isso em todas as versões. Combinei a abordagem de consulta de registro (VS2015 e abaixo) com o uso de vswhere (VS2017 e acima) para obter isso:
fonte
Existem muitas respostas corretas. No entanto, aqui um One-Liner no PowerShell que eu uso para determinar o caminho do MSBuild para a versão mais recente :
fonte
-last 1
(em vez de-first 1
obter a versão mais recente) e também concatenar o nome do arquivo (para obter corretamente o caminho completo e não apenas a pasta).Esse método do PowerShell obtém o caminho para o msBuild de várias fontes. Tentando em ordem:
Primeiro usando vswhere (porque o Visual Studio parece ter versões mais atualizadas do msBuild), por exemplo
Se não for encontrado, tente o registro (versão da estrutura), por exemplo
Código do PowerShell:
fonte
Para o Visual Studio 2017 sem saber a edição exata, você pode usá-lo em um script em lote:
O comando findstr é ignorar certos executáveis do msbuild (neste exemplo, o amd64).
fonte
adicione o ramo vswhere em https://github.com/linqpadless/LinqPadless/blob/master/build.cmd , funciona bem no meu computador e o ramo vswhere funciona no computador do meu companheiro. Pode ser que o ramo vswhere deva avançar como a primeira verificação.
fonte
Se você é aventureiro, também pode obter o código fonte e a versão mais recente do MsBuild no GitHub agora em https://github.com/Microsoft/msbuild/releases/
fonte
Obtenha a versão mais recente do MsBuild. A melhor maneira, para todos os tipos de instalação do msbuild, para diferentes arquiteturas de processador (Power Shell):
fonte
Se você deseja compilar um projeto Delphi, consulte "ERRO MSB4040 Não há destino no projeto" ao usar o msbuild + Delphi2009
A resposta correta é dita: "Existe um arquivo em lotes chamado rsvars.bat (procure-o na pasta RAD Studio). Chame isso antes de chamar o MSBuild e ele configurará as variáveis de ambiente necessárias. Verifique se as pastas estão corretas no rsvars .bat se você tiver o compilador em um local diferente do padrão. "
Este bastão não apenas atualiza a variável de ambiente PATH para a pasta .NET apropriada com a versão apropriada do MSBuild.exe, mas também registra outras variáveis necessárias.
fonte