উত্তর:
রেজিস্ট্রি চারপাশে হাঁসফাঁস, দেখে মনে হচ্ছে
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
আপনার পরে কি হতে পারে; regedit.exe ফায়ার করুন এবং একবার দেখুন।
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\
আপনি কমান্ড লাইনে এমএসবিল্ড.এক্সির পথ মুদ্রণ করতে পারেন:
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
/reg:32
বা /reg:64
উভয় bitnessess উপর cmd
(অথবা যাই হোক না কেন প্রক্রিয়ায় আপনার দৌড়াচ্ছে) স্পষ্টভাবে সেই পথ পেতে।
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath
আপনি যদি নেট 4 এর জন্য এমএসবিল্ডটি ব্যবহার করতে চান তবে এক্সিকিউটেবলের পাথ পেতে আপনি নীচের পাওয়ারশেল কমান্ডটি ব্যবহার করতে পারেন। আপনি যদি 2.0 বা 3.5 সংস্করণ চান তবে কেবল $ ডটনেট ভার্সন ভেরিয়েবলটি পরিবর্তন করুন।
এক্সিকিউটেবল চালনার জন্য আপনাকে & এর সাথে bu এমএসবিল্ড ভেরিয়েবল প্রিনেন্ড করতে হবে। এটি ভেরিয়েবল কার্যকর করবে।
# valid versions are [2.0, 3.5, 4.0]
$dotNetVersion = "4.0"
$regKey = "HKLM:\software\Microsoft\MSBuild\ToolsVersions\$dotNetVersion"
$regProperty = "MSBuildToolsPath"
$msbuildExe = join-path -path (Get-ItemProperty $regKey).$regProperty -childpath "msbuild.exe"
&$msbuildExe
$dotNetVersion
12.0 (বনাম 2013) এবং 14.0 (বনাম 2015) এর জন্যও (যদি ইনস্টল থাকে তবে) কাজ করে
HKLM:\software\Microsoft\MSBuild\ToolsVersions
কী এর অধীনে কোনও মান যুক্ত করে না । পরিবর্তে আপনার ভিএস2017 ইনস্টল দির কাছ থেকে নেওয়া দরকার HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7\15.0
, তারপরে MSBuild\15.0\Bin\MSBuild.exe
এমএসবিল্ড EXE অবস্থান পেতে যোগ করুন ।
উইন্ডোজ in-তে সেন্টিমিডি শেল স্ক্রিপ্টিংয়ের জন্য, .NET ফ্রেমওয়ার্ক সংস্করণে MSBuild.exe সন্ধানের জন্য আমি আমার ব্যাচ ফাইলে নিম্নলিখিত টুকরাটি ব্যবহার করি I আমি সংস্করণ 4 উপস্থিত রয়েছে বলে মনে করি, তবে উপ-সংস্করণটি ধরে নিই না। এটি সম্পূর্ণ সাধারণ উদ্দেশ্যে নয়, তবে দ্রুত স্ক্রিপ্টগুলির জন্য এটি সহায়ক হতে পারে:
set msbuild.exe=
for /D %%D in (%SYSTEMROOT%\Microsoft.NET\Framework\v4*) do set msbuild.exe=%%D\MSBuild.exe
আমার ব্যবহারের জন্য আমি ব্যাচ ফাইলটি ত্রুটি সহ প্রস্থান করছি যদি এটি কাজ না করে:
if not defined msbuild.exe echo error: can't find MSBuild.exe & goto :eof
if not exist "%msbuild.exe%" echo error: %msbuild.exe%: not found & goto :eof
set bb.build.msbuild.exe=
জন্য? এটি প্রয়োজনীয় বা আপনার সেটআপের কেবল একটি শৈল্পিক?
MSBuildToolsPath
রেজিস্ট্রি থেকে পাওয়ার জন্য আপনি এই অত্যন্ত পরীক্ষামূলক পাওয়ারশেল কমান্ডটি ব্যবহার করতে পারেন ।
Resolve-Path HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\* |
Get-ItemProperty -Name MSBuildToolsPath
MSBuildToolsPath : C:\Program Files (x86)\MSBuild\12.0\bin\amd64\
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\12.0
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions
PSChildName : 12.0
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
MSBuildToolsPath : C:\Program Files (x86)\MSBuild\14.0\bin\amd64\
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions
PSChildName : 14.0
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
MSBuildToolsPath : C:\Windows\Microsoft.NET\Framework64\v2.0.50727\
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions
PSChildName : 2.0
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
MSBuildToolsPath : C:\Windows\Microsoft.NET\Framework64\v3.5\
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions
PSChildName : 3.5
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
MSBuildToolsPath : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions
PSChildName : 4.0
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
বা ফাইল সিস্টেম থেকে
Resolve-Path "C:\Program Files (x86)\MSBuild\*\Bin\amd64\MSBuild.exe"
Resolve-Path "C:\Program Files (x86)\MSBuild\*\Bin\MSBuild.exe"
Path
----
C:\Program Files (x86)\MSBuild\12.0\Bin\amd64\MSBuild.exe
C:\Program Files (x86)\MSBuild\14.0\Bin\amd64\MSBuild.exe
C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe
C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe
এমএসবিল্ড সন্ধানের জন্য নির্দেশাবলী :
&"${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
ভিএসটিস্টের সন্ধানের জন্য নির্দেশাবলী :
&"${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
(নোট যে নির্দেশাবলী উপরে সামান্য মাইক্রোসফট এর অফিসিয়াল বেশী থেকে পরিবর্তিত হয়। বিশেষ করে, আমি অন্তর্ভুক্ত করেছি -prerelease
পতাকা পূর্বরূপ দেখুন এবং রেসিন ইনস্টলেশনের কুড়ান করা, এবং অনুমতি -products *
ভিসুয়াল স্টুডিও বিল্ড সরঞ্জাম ইনস্টলেশনের সনাক্ত করতে।)
এটি কেবল দুই বছরের বেশি সময় নিয়েছে তবে শেষ পর্যন্ত 2019 এ, মাইক্রোসফ্ট আমাদের এই গুরুত্বপূর্ণ নির্বাহীগুলির সন্ধানের জন্য একটি উপায় শুনিয়েছে এবং একটি উপায় দিয়েছে ! আপনার যদি ভিজ্যুয়াল স্টুডিও 2017 এবং / অথবা 2019 ইনস্টল করা থাকে তবে vswhere
এমএসবিল্ড এট আল এর অবস্থানের জন্য ইউটিলিটিটি অনুসন্ধান করা যেতে পারে। যেহেতু vswhere
সর্বদা এটি অবস্থিত %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
তাই কোনও বুটস্ট্র্যাপিং নেই এবং আর কোনও পথ হার্ডকোডিংয়ের প্রয়োজন নেই।
জাদু -find
প্যারামিটার হয়, সংস্করণ 2.6.2 যোগ । আপনি চালনা করে vswhere
বা এর ফাইলের বৈশিষ্ট্যগুলি পরীক্ষা করে আপনি ইনস্টল করা সংস্করণটি নির্ধারণ করতে পারেন । আপনার যদি পুরানো সংস্করণ থাকে তবে আপনি কেবল সর্বশেষতমটি ডাউনলোড করতে এবং বিদ্যমানটিকে ওভাররাইট করতে পারেন %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
।
vswhere.exe
এটি একটি স্বতন্ত্র নির্বাহযোগ্য, যাতে আপনি যে কোনও জায়গা থেকে আপনার ইন্টারনেট সংযোগ আছে এটিকে ডাউনলোড করে চালাতে পারেন। তার অর্থ আপনার বিল্ড স্ক্রিপ্টগুলি পরীক্ষা করতে পারে যে তারা যে পরিবেশে চলছে সেগুলি সঠিকভাবে সেটআপ করা হচ্ছে কিনা, একটি বিকল্পের নামকরণ করতে।
msbuild
কমান্ড লাইনে টাইপ করেন (বিশেষত ভিজুয়াল স্টুডিও কমান্ড লাইন যদি এটি ব্যবহার করা হয়), তবে এটিই ব্যবহৃত হবে। কি ব্যবহৃত কিনা দেখতে আপনি টাইপ msbuild
কমান্ড লাইন এ এই কাজ: where msbuild
। এটি যদি ভিএসডাব্লুএর হিসাবে সর্বশেষতম এবং সর্বশ্রেষ্ঠটি বলে তেমনটি জানাচ্ছে না, তবে আপনি যেটি msbuild.exe
ব্যবহার করতে চান তার একটি সম্পূর্ণ পথ আপনাকে করতে হবে বা আপনার প্যাথ ভেরিয়েবলের সাথে সামঞ্জস্য করতে হবে।
@ অ্যালেনস্যানোবনের একটি দুর্দান্ত পাওয়ার শেল সংস্করণ রয়েছে তবে কিছু লোকের বিল্ডগুলির জন্য কেবল ব্যাচের স্ক্রিপ্ট ব্যবহার করার প্রয়োজন রয়েছে।
এটি @ Bono8106 যে উত্তর দিয়েছে তার একটি প্রয়োগ সংস্করণ।
msbuildpath.bat
@echo off
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath > nul 2>&1
if ERRORLEVEL 1 goto MissingMSBuildRegistry
for /f "skip=2 tokens=2,*" %%A in ('reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath') do SET "MSBUILDDIR=%%B"
IF NOT EXIST "%MSBUILDDIR%" goto MissingMSBuildToolsPath
IF NOT EXIST "%MSBUILDDIR%msbuild.exe" goto MissingMSBuildExe
exit /b 0
goto:eof
::ERRORS
::---------------------
:MissingMSBuildRegistry
echo Cannot obtain path to MSBuild tools from registry
goto:eof
:MissingMSBuildToolsPath
echo The MSBuild tools path from the registry '%MSBUILDDIR%' does not exist
goto:eof
:MissingMSBuildExe
echo The MSBuild executable could not be found at '%MSBUILDDIR%'
goto:eof
build.bat
@echo off
call msbuildpath.bat
"%MSBUILDDIR%msbuild.exe" foo.csproj /p:Configuration=Release
ভিজ্যুয়াল স্টুডিও 2017 / এমএস বিল্ড 15 এর জন্য, আজিজ আতিফ (যে ব্যক্তি এলমা লিখেছেন) একটি ব্যাচের স্ক্রিপ্ট লিখেছিলেন
build.cmd Release Foo.csproj
https://github.com/linqpadless/LinqPadless/blob/master/build.cmd
@echo off
setlocal
if "%PROCESSOR_ARCHITECTURE%"=="x86" set PROGRAMS=%ProgramFiles%
if defined ProgramFiles(x86) set PROGRAMS=%ProgramFiles(x86)%
for %%e in (Community Professional Enterprise) do (
if exist "%PROGRAMS%\Microsoft Visual Studio\2017\%%e\MSBuild\15.0\Bin\MSBuild.exe" (
set "MSBUILD=%PROGRAMS%\Microsoft Visual Studio\2017\%%e\MSBuild\15.0\Bin\MSBuild.exe"
)
)
if exist "%MSBUILD%" goto :restore
set MSBUILD=
for %%i in (MSBuild.exe) do set MSBUILD=%%~dpnx$PATH:i
if not defined MSBUILD goto :nomsbuild
set MSBUILD_VERSION_MAJOR=
set MSBUILD_VERSION_MINOR=
for /f "delims=. tokens=1,2,3,4" %%m in ('msbuild /version /nologo') do (
set MSBUILD_VERSION_MAJOR=%%m
set MSBUILD_VERSION_MINOR=%%n
)
if not defined MSBUILD_VERSION_MAJOR goto :nomsbuild
if not defined MSBUILD_VERSION_MINOR goto :nomsbuild
if %MSBUILD_VERSION_MAJOR% lss 15 goto :nomsbuild
if %MSBUILD_VERSION_MINOR% lss 1 goto :nomsbuild
:restore
for %%i in (NuGet.exe) do set nuget=%%~dpnx$PATH:i
if "%nuget%"=="" (
echo WARNING! NuGet executable not found in PATH so build may fail!
echo For more on NuGet, see https://github.com/nuget/home
)
pushd "%~dp0"
nuget restore ^
&& call :build Debug %* ^
&& call :build Release %*
popd
goto :EOF
:build
setlocal
"%MSBUILD%" /p:Configuration=%1 /v:m %2 %3 %4 %5 %6 %7 %8 %9
goto :EOF
:nomsbuild
echo Microsoft Build version 15.1 (or later) does not appear to be
echo installed on this machine, which is required to build the solution.
exit /b 1
এটি ভিজ্যুয়াল স্টুডিও 2015 এবং 2017 এর জন্য কাজ করে:
function Get-MSBuild-Path {
$vs14key = "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0"
$vs15key = "HKLM:\SOFTWARE\wow6432node\Microsoft\VisualStudio\SxS\VS7"
$msbuildPath = ""
if (Test-Path $vs14key) {
$key = Get-ItemProperty $vs14key
$subkey = $key.MSBuildToolsPath
if ($subkey) {
$msbuildPath = Join-Path $subkey "msbuild.exe"
}
}
if (Test-Path $vs15key) {
$key = Get-ItemProperty $vs15key
$subkey = $key."15.0"
if ($subkey) {
$msbuildPath = Join-Path $subkey "MSBuild\15.0\bin\amd64\msbuild.exe"
}
}
return $msbuildPath
}
vswhere -products *
- MSBuild এ উল্লিখিত হিসাবে ব্যবহার করুন ।
রেজিস্ট্রি অবস্থান
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5
এক্সিকিউটেবলের জন্য লোকেশন দিন।
তবে আপনার যদি টাস্ক এক্সটেনশানগুলি সংরক্ষণ করতে হয় এমন স্থানের প্রয়োজন হয় তবে এটি চালু
%ProgramFiles%\MSBuild
@ Dh_cgn এর উত্তরের ভিত্তিতে একটি ওয়ান-লাইনার :
(Resolve-Path ([io.path]::combine(${env:ProgramFiles(x86)}, 'Microsoft Visual Studio', '*', '*', 'MSBuild', '*' , 'bin' , 'msbuild.exe'))).Path
এটি যেমন বিদ্যমান সমস্ত পাথ পাথ নির্বাচন করে। C:\Program Files (x86)\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe
।
ওয়াইল্ডকার্ড তারকারা হলেন:
সচেতন থাকুন যে এই আদেশটি বর্ণমালা দ্বারা অর্ডার করা অভিব্যক্তিটির সাথে মেলে এমন প্রথম পথটি নির্বাচন করছে। এটিকে সঙ্কুচিত করতে কেবল নির্দিষ্ট উপাদানগুলি সহ ওয়াইল্ডকার্ডগুলি প্রতিস্থাপন করুন eg বছর বা সরঞ্জাম সংস্করণ।
উইন্ডোজ 2003 এবং তারপরে, এই কমান্ডটি সেমিডিতে টাইপ করুন:
cmd> where MSBuild
Sample result: C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
যদি কিছু না উপস্থিত হয়, তার অর্থ হ'ল .NET কাঠামোটি সিস্টেম PATH এ অন্তর্ভুক্ত নয়। এমএসবিল্ডটি .NET ইনস্টলেশন ফোল্ডারে, নেট সংকলক (vbc.exe, csc.exe) এর সাথে থাকা উচিত
এমএসবিল্ড 2017 (v15) দিয়ে শুরু করে, এমএসবিল্ড এখন ভিজ্যুয়াল স্টুডিওর প্রতিটি সংস্করণের অধীনে একটি ফোল্ডারে ইনস্টল করা আছে
আমার মেশিনে এমএসবিল্ড.এক্স.পি কোথায় পাওয়া যায় তার কয়েকটি উদাহরণ এখানে রয়েছে:
C:\windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe (v2.0.50727.8745 32-bit)
C:\windows\Microsoft.NET\Framework64\v2.0.50727\MSBuild.exe (v2.0.50727.8745 64-bit)
C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe (v3.5.30729.8763 32-bit)
C:\Windows\Microsoft.NET\Framework64\v3.5\MSBuild.exe (v3.5.30729.8763 64-bit)
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe (v4.7.2053.0 32-bit)
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe (v4.7.2053.0 64-bit)
C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe (v12.0.21005.1 32-bit)
C:\Program Files (x86)\MSBuild\12.0\Bin\amd64\MSBuild.exe (v12.0.21005.1 64-bit)
C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe (v14.0.25420.1 32-bit)
C:\Program Files (x86)\MSBuild\14.0\Bin\amd64\MSBuild.exe (v14.0.25420.1 64-bit)
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe (v15.1.1012+g251a9aec17 32-bit)
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\amd64\MSBuild.exe (v15.1.1012+g251a9aec17 64-bit)
C:\Program Files (x86)\Microsoft Visual Studio\2017\{LicenceName}\MSBuild\Bin\MSBuild.exe (v15.1.1012.6693 32-bit)
C:\Program Files (x86)\Microsoft Visual Studio\2017\{LicenceName}\MSBuild\Bin\amd64\MSBuild.exe (v15.1.1012.6693 64-bit)
রেজিস্ট্রি ডাব্লু / ও অতিরিক্ত সরঞ্জাম থেকে ব্যাচ সহ এমএসবিল্ড 15 (ভিজ্যুয়াল স্টুডিও 2017) এর পথ পুনরুদ্ধার করতে :
set regKey=HKLM\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7
set regValue=15.0
for /f "skip=2 tokens=3,*" %%A in ('reg.exe query %regKey% /v %regValue% 2^>nul') do (
set vs17path=%%A %%B
)
set msbuild15path = %vs17path%\MSBuild\15.0\Bin\MSBuild.exe
আরও ভাল সরঞ্জাম উপলব্ধ:
আপনি এখানে যুক্ত করার মতো অনেক কিছুই ভাববেন না, তবে সম্ভবত সমস্ত সংস্করণ জুড়ে এটি একীকরণের উপায়। আমি এর সাথে আসতে ভেসোয়ার (ভিএস ২০১7 এবং উপরে) ব্যবহারের সাথে রেজিস্ট্রি-ক্যোয়ারী পদ্ধতির (ভিএস ২০১৫ এবং নীচে) একত্রিত করেছি :
function Find-MsBuild {
Write-Host "Using VSWhere to find msbuild..."
$path = & $vswhere -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe | select-object -first 1
if (!$path) {
Write-Host "No results from VSWhere, using registry key query to find msbuild (note this will find pre-VS2017 versions)..."
$path = Resolve-Path HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\* |
Get-ItemProperty -Name MSBuildToolsPath |
sort -Property @{ Expression={ [double]::Parse($_.PSChildName) }; Descending=$true } |
select -exp MSBuildToolsPath -First 1 |
Join-Path -ChildPath "msbuild.exe"
}
if (!$path) {
throw "Unable to find path to msbuild.exe"
}
if (!(Test-Path $path)) {
throw "Found path to msbuild as $path, but file does not exist there"
}
Write-Host "Using MSBuild at $path..."
return $path
}
অনেক সঠিক উত্তর আছে। তবে, এখানে পাওয়ারশেলের একটি ওয়ান-লাইনার আমি অতি সাম্প্রতিক সংস্করণের জন্য এমএসবিল্ড পথ নির্ধারণ করতে ব্যবহার করি :
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\' |
Get-ItemProperty -Name MSBuildToolsPath |
Sort-Object PSChildName |
Select-Object -ExpandProperty MSBuildToolsPath -first 1
-last 1
( -first 1
সর্বশেষতম সংস্করণটি পাওয়ার পরিবর্তে ) ব্যবহার করি এবং ফাইলের নামটিও (যথাযথভাবে পুরো পথটি পেতে এবং কেবল ফোল্ডারটিই নয়) সম্মতি জানাতে পারি।
এই পাওয়ারশেল পদ্ধতিটি একাধিক উত্স থেকে এমএসবিল্ডের পথ পায়। যথাযথ চেষ্টা করা:
প্রথমে বনাম কোথাও ব্যবহার করা (কারণ ভিজ্যুয়াল স্টুডিওতে এমএসবিল্ডের আরও আধুনিক সংস্করণ রয়েছে) উদাহরণস্বরূপ
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe
পাওয়া না গেলে রেজিস্ট্রি চেষ্টা করে (ফ্রেমওয়ার্ক ভার্সন) যেমন
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe
পাওয়ারশেল কোড:
Function GetMsBuildPath {
Function GetMsBuildPathFromVswhere {
# Based on https://github.com/microsoft/vswhere/wiki/Find-MSBuild/62adac8eb22431fa91d94e03503d76d48a74939c
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$path = & $vswhere -latest -prerelease -products * -requires Microsoft.Component.MSBuild -property installationPath
if ($path) {
$tool = join-path $path 'MSBuild\Current\Bin\MSBuild.exe'
if (test-path $tool) {
return $tool
}
$tool = join-path $path 'MSBuild\15.0\Bin\MSBuild.exe'
if (test-path $tool) {
return $tool
}
}
}
Function GetMsBuildPathFromRegistry {
# Based on Martin Brandl's answer: https://stackoverflow.com/a/57214958/146513
$msBuildDir = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\' |
Get-ItemProperty -Name MSBuildToolsPath |
Sort-Object PSChildName |
Select-Object -ExpandProperty MSBuildToolsPath -last 1
$msBuildPath = join-path $msBuildDir 'msbuild.exe'
if (test-path $msBuildPath) {
return $msBuildPath
}
}
$msBuildPath = GetMsBuildPathFromVswhere
if (-Not $msBuildPath) {
$msBuildPath = GetMsBuildPathFromRegistry
}
return $msBuildPath
}
সঠিক সংস্করণ না জেনে ভিজুয়াল স্টুডিও 2017 এর জন্য আপনি এটি ব্যাচের স্ক্রিপ্টে ব্যবহার করতে পারেন:
FOR /F "tokens=* USEBACKQ" %%F IN (`where /r "%PROGRAMFILES(x86)%\Microsoft Visual
Studio\2017" msbuild.exe ^| findstr /v /i "amd64"`) DO (SET msbuildpath=%%F)
ফাইন্ডস্ট্র্ট কমান্ডটি নির্দিষ্ট এমএসবিল্ড এক্সিকিউটেবলকে উপেক্ষা করা হয় (উদাহরণস্বরূপ এএমডি 64)।
https://github.com/linqpadless/LinqPadless/blob/master/build.cmd এর জন্য ভার্সোয়ার শাখা যুক্ত করুন , আমার কম্পিউটারে সূক্ষ্ম কাজ করে এবং ভার্সেস ব্রাঞ্চটি আমার সাথীর কম্পিউটারে কাজ করে। হতে পারে, ভার্সোয়ার ব্রাঞ্চের প্রথম চেক হিসাবে এগিয়ে যাওয়া উচিত।
@echo off
setlocal
if "%PROCESSOR_ARCHITECTURE%"=="x86" set PROGRAMS=%ProgramFiles%
if defined ProgramFiles(x86) set PROGRAMS=%ProgramFiles(x86)%
for %%e in (Community Professional Enterprise) do (
if exist "%PROGRAMS%\Microsoft Visual Studio\2017\%%e\MSBuild\15.0\Bin\MSBuild.exe" (
set "MSBUILD=%PROGRAMS%\Microsoft Visual Studio\2017\%%e\MSBuild\15.0\Bin\MSBuild.exe"
)
)
if exist "%MSBUILD%" goto :build
for /f "usebackq tokens=1* delims=: " %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild`) do (
if /i "%%i"=="installationPath" set InstallDir=%%j
)
if exist "%InstallDir%\MSBuild\15.0\Bin\MSBuild.exe" (
set "MSBUILD=%InstallDir%\MSBuild\15.0\Bin\MSBuild.exe"
)
if exist "%MSBUILD%" goto :build
set MSBUILD=
for %%i in (MSBuild.exe) do set MSBUILD=%%~dpnx$PATH:i
if not defined MSBUILD goto :nomsbuild
set MSBUILD_VERSION_MAJOR=
set MSBUILD_VERSION_MINOR=
for /f "delims=. tokens=1,2,3,4" %%m in ('msbuild /version /nologo') do (
set MSBUILD_VERSION_MAJOR=%%m
set MSBUILD_VERSION_MINOR=%%n
)
echo %MSBUILD_VERSION_MAJOR% %MSBUILD_VERSION_MINOR%
if not defined MSBUILD_VERSION_MAJOR goto :nomsbuild
if not defined MSBUILD_VERSION_MINOR goto :nomsbuild
if %MSBUILD_VERSION_MAJOR% lss 15 goto :nomsbuild
if %MSBUILD_VERSION_MINOR% lss 1 goto :nomsbuild
:restore
for %%i in (NuGet.exe) do set nuget=%%~dpnx$PATH:i
if "%nuget%"=="" (
echo WARNING! NuGet executable not found in PATH so build may fail!
echo For more on NuGet, see https://github.com/nuget/home
)
pushd "%~dp0"
popd
goto :EOF
:build
setlocal
"%MSBUILD%" -restore -maxcpucount %1 /p:Configuration=%2 /v:m %3 %4 %5 %6 %7 %8 %9
goto :EOF
:nomsbuild
echo Microsoft Build version 15.1 (or later) does not appear to be
echo installed on this machine, which is required to build the solution.
exit /b 1
আপনি যদি দুঃসাহসী হন তবে আপনি সোর্স কোড এবং গিটহাব থেকে এমএসবিল্ডের সর্বশেষ প্রকাশটি এখন https://github.com/Mic Microsoft/msbuild/releases/ এ পেতে পারেন
MsBuild এর সর্বশেষতম সংস্করণ পান। বিভিন্ন প্রসেসরের আর্কিটেকচারের (পাওয়ার শেল) সমস্ত ধরণের এমএসবিল্ড ইনস্টলেশন জন্য, সর্বোত্তম উপায়:
function Get-MsBuild-Path
{
$msbuildPathes = $null
$ptrSize = [System.IntPtr]::Size
switch ($ptrSize) {
4 {
$msbuildPathes =
@(Resolve-Path "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\*\*\MSBuild\*\Bin\msbuild.exe" -ErrorAction SilentlyContinue) +
@(Resolve-Path "${Env:ProgramFiles(x86)}\MSBuild\*\Bin\MSBuild.exe" -ErrorAction SilentlyContinue) +
@(Resolve-Path "${Env:windir}\Microsoft.NET\Framework\*\MSBuild.exe" -ErrorAction SilentlyContinue)
}
8 {
$msbuildPathes =
@(Resolve-Path "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\*\*\MSBuild\*\Bin\amd64\msbuild.exe" -ErrorAction SilentlyContinue) +
@(Resolve-Path "${Env:ProgramFiles(x86)}\MSBuild\*\Bin\amd64\MSBuild.exe" -ErrorAction SilentlyContinue) +
@(Resolve-Path "${Env:windir}\Microsoft.NET\Framework64\*\MSBuild.exe" -ErrorAction SilentlyContinue)
}
default {
throw ($msgs.error_unknown_pointersize -f $ptrSize)
}
}
$latestMSBuildPath = $null
$latestVersion = $null
foreach ($msbuildFile in $msbuildPathes)
{
$msbuildPath = $msbuildFile.Path
$versionOutput = & $msbuildPath -version
$fileVersion = (New-Object System.Version($versionOutput[$versionOutput.Length - 1]))
if (!$latestVersion -or $latestVersion -lt $fileVersion)
{
$latestVersion = $fileVersion
$latestMSBuildPath = $msbuildPath
}
}
Write-Host "MSBuild version detected: $latestVersion" -Foreground Yellow
Write-Host "MSBuild path: $latestMSBuildPath" -Foreground Yellow
return $latestMSBuildPath;
}
আপনি যদি একটি ডেলফি প্রকল্প সংকলন করতে চান তবে এমএসবিল্ড + ডেলফি ২০০9 ব্যবহার করার সময় "প্রকল্পের কোনও লক্ষ্য নেই" প্রকল্পের কোনও লক্ষ্য নেই "দেখুন
সঠিক উত্তর সেখানে বলা হয়েছে: " আরএসভার্স.বাট নামে একটি ব্যাচের ফাইল রয়েছে (এটি আরএডি স্টুডিও ফোল্ডারে সন্ধান করুন)। এমএসবিল্ড কল করার আগে কল করুন এবং এটি প্রয়োজনীয় পরিবেশের ভেরিয়েবল সেটআপ করবে Make ফোল্ডারগুলি আরএসওয়ারে সঠিক কিনা তা নিশ্চিত করুন Make .bat যদি আপনার ডিফল্টর চেয়ে আলাদা জায়গায় সংকলক থাকে ""
এই ব্যাটটি যথাযথ MSBuild.exe সংস্করণ সহ উপযুক্ত .NET ফোল্ডারে PATH এনভায়রনমেন্ট ভেরিয়েবলটি আপডেট করবে না, তবে অন্যান্য প্রয়োজনীয় ভেরিয়েবলগুলিও নিবন্ধভুক্ত করবে।