Yanıtlar:
Buradan özgürce çalarak: http://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-prompt.html , bunu çalıştırmayı başardım. Aşağıdakileri profile.ps1 ekledim ve dünya ile her şey yolunda.
pushd 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC'
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
write-host "`nVisual Studio 2010 Command Prompt variables set." -ForegroundColor Yellow
Bu, Visual Studio 2015'e kadar yıllarca iyi çalıştı. Vcvarsall.bat artık mevcut değil. Bunun yerine, Common7 \ Tools klasöründe bulunan vsvars32.bat dosyasını kullanabilirsiniz.
pushd 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools'
cmd /c "vsvars32.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
write-host "`nVisual Studio 2015 Command Prompt variables set." -ForegroundColor Yellow
Visual Studio 2017 için işler yine değişti vsvars32.bat
. Lehine bırakılmış gibi görünüyor VsDevCmd.bat
. Tam yol, kullandığınız Visual Studio 2017 sürümüne bağlı olarak değişebilir.
pushd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools"
cmd /c "VsDevCmd.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
Write-Host "`nVisual Studio 2017 Command Prompt variables set." -ForegroundColor Yellow
echo $Profile
profiliniz için amaçlanan yolu görmek için.ps1, eğer hiç oluşturmadıysanız
En basit seçenek, VS 2010 komut istemini çalıştırmak ve ardından PowerShell.exe'yi başlatmaktır. Bunu gerçekten "evinizdeki" PowerShell komut isteminizden yapmak istiyorsanız, gösterdiğiniz yaklaşım gitmenin yoludur. Lee Holmes'un bir süre önce yazdığı bir senaryoyu kullanıyorum:
<#
.SYNOPSIS
Invokes the specified batch file and retains any environment variable changes
it makes.
.DESCRIPTION
Invoke the specified batch file (and parameters), but also propagate any
environment variable changes back to the PowerShell environment that
called it.
.PARAMETER Path
Path to a .bat or .cmd file.
.PARAMETER Parameters
Parameters to pass to the batch file.
.EXAMPLE
C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat"
Invokes the vcvarsall.bat file to set up a 32-bit dev environment. All
environment variable changes it makes will be propagated to the current
PowerShell session.
.EXAMPLE
C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat" amd64
Invokes the vcvarsall.bat file to set up a 64-bit dev environment. All
environment variable changes it makes will be propagated to the current
PowerShell session.
.NOTES
Author: Lee Holmes
#>
function Invoke-BatchFile
{
param([string]$Path, [string]$Parameters)
$tempFile = [IO.Path]::GetTempFileName()
## Store the output of cmd.exe. We also ask cmd.exe to output
## the environment table after the batch file completes
cmd.exe /c " `"$Path`" $Parameters && set > `"$tempFile`" "
## Go through the environment variables in the temp file.
## For each of them, set the variable in our local environment.
Get-Content $tempFile | Foreach-Object {
if ($_ -match "^(.*?)=(.*)$")
{
Set-Content "env:\$($matches[1])" $matches[2]
}
}
Remove-Item $tempFile
}
Not: Bu işlev, yakında çıkacak olan PowerShell Community Extensions 2.0 modül tabanlı sürümünde mevcut olacaktır .
Burada basit bir yöntem buldum : kısayolu değiştirin.
Orijinal kısayol şuna benzer:
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat""
& powershell
Son alıntıdan önce şunu ekleyin :
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" & powershell"
Daha çok PS'ye benzemek istiyorsanız , kısayol özelliklerinin Renkler sekmesine gidin ve Kırmızı, Yeşil ve Mavi değerlerini sırasıyla 1, 36 ve 86 olarak ayarlayın.
Eski bir soru ama başka bir cevaba değer (a) VS2013 desteği sağlama; (b) önceki iki cevabın en iyilerini birleştirmek; ve (c) bir işlev sarmalayıcısı sağlar.
Bu, @ Andy'nin tekniğine dayanıyor (Andy'nin belirttiği gibi Allen Mack'in tekniğine dayanıyor (bu da Allen'ın belirttiği gibi Robert Anderson'ın tekniğine dayanıyor (bunların tümü, bu sayfada kullanıcı tarafından yalnızca "me- - ", bu yüzden bunu da hesaba kattım))).
İşte benim son kodum - değerlerdeki olası gömülü eşitleri işlemek için normal ifadede açgözlü olmayan niceleyicinin kullanımına dikkat edin. Bu aynı zamanda kodu basitleştirmek için de olur: Andy'nin örneğindeki gibi bir eşleşme yerine tek bir eşleşme veya "ben -" örneğindeki gibi indeks ve alt dizeler eşleştirme.
function Set-VsCmd
{
param(
[parameter(Mandatory, HelpMessage="Enter VS version as 2010, 2012, or 2013")]
[ValidateSet(2010,2012,2013)]
[int]$version
)
$VS_VERSION = @{ 2010 = "10.0"; 2012 = "11.0"; 2013 = "12.0" }
$targetDir = "c:\Program Files (x86)\Microsoft Visual Studio $($VS_VERSION[$version])\VC"
if (!(Test-Path (Join-Path $targetDir "vcvarsall.bat"))) {
"Error: Visual Studio $version not installed"
return
}
pushd $targetDir
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "(.*?)=(.*)") {
Set-Item -force -path "ENV:\$($matches[1])" -value "$($matches[2])"
}
}
popd
write-host "`nVisual Studio $version Command Prompt variables set." -ForegroundColor Yellow
}
[parameter(Mandatory=$true,
...
cmd /c """$targetDir\vcvarsall.bat""&set"
Keith, şu Invoke-BatchFile
komutla PowerShell Community Extensions'tan (PSCX) bahsetti :
Invoke-BatchFile "${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
Ayrıca PSCX'in bir Import-VisualStudioVars
işlevi olduğunu da fark ettim :
Import-VisualStudioVars -VisualStudioVersion 2013
Cevabı için Andy S'ye şeref. Çözümünü bir süredir kullanıyorum ama bugün bir sorunla karşılaştım. Eşittir işareti olan herhangi bir değer eşittir işaretinde kesilir. Örneğin:
JAVA_TOOL_OPTIONS=-Duser.home=C:\Users\Me
Ancak PS oturumum şunları bildirdi:
PS C:\> $env:JAVA_TOOL_OPTIONS
-Duser.home
Profil komut dosyamı şu şekilde değiştirerek bunu düzelttim:
pushd 'c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC'
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "=") {
$i = $_.indexof("=")
$k = $_.substring(0, $i)
$v = $_.substring($i + 1)
set-item -force -path "ENV:\$k" -value "$v"
}
}
popd
2020 ve Visual Studio Code 1.41.1'de hala bununla mücadele eden biri için, bu yüzden burada biraz konu dışı.
Yukarıdan ve İnternet'ten tüm farklı kod parçalarını kullanarak, örneğin https://help.appveyor.com/discussions/questions/18777-how-to-use-vcvars64bat-from-powershell'den ve adım adım bir yaklaşımla aşağıdaki komut dosyasını çalıştırın.
VSCode "settings.json" içine ve Code Runner uzantısı yüklü olarak kaydedildi.
Visual Studio 2015 / 14.0'dan Microsoft (R) C / C ++ Optimizing Compiler Version "cl.exe" ile:
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"cpp": "cd $dir; pushd \"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\"; cmd.exe /c \"call vcvarsall.bat x86_amd64 & set > %temp%\\vcvars.txt\"; Get-Content \"$env:temp\\vcvars.txt\" | Foreach-Object { if ($_ -match \"^(.*?)=(.*)$\") { Set-Content \"env:\\$($matches[1])\" $matches[2] }}; popd; cls; cl *.cpp; .\\\"$fileNameWithoutExt.exe\"; Write-Host -NoNewLine 'Press any key to continue...'; $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); del \"$fileNameWithoutExt.exe\"; del \"$fileNameWithoutExt.obj\""}
Visual Studio 2019 / 16.4.3'ten Microsoft (R) C / C ++ Optimize Edici Derleyici Sürümü "cl.exe" ile:
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"cpp": "cd $dir; pushd \"c:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\"; cmd.exe /c \"call vcvarsall.bat x86_amd64 & set > %temp%\\vcvars.txt\"; Get-Content \"$env:temp\\vcvars.txt\" | Foreach-Object { if ($_ -match \"^(.*?)=(.*)$\") { Set-Content \"env:\\$($matches[1])\" $matches[2] }}; popd; cls; cl *.cpp; .\\\"$fileNameWithoutExt.exe\"; Write-Host -NoNewLine 'Press any key to continue...'; $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); del \"$fileNameWithoutExt.exe\"; del \"$fileNameWithoutExt.obj\""}
HTH
Komutları bir alt kabuğa şu şekilde iletmeyi seviyorum:
cmd /c "`"${env:VS140COMNTOOLS}vsvars32.bat`" && <someCommand>"
Veya alternatif olarak
cmd /c "`"${env:VS140COMNTOOLS}..\..\VC\vcvarsall.bat`" amd64 && <someCommand> && <someOtherCommand>"