এমএসবিল্ডের পথে


186

আমার .exe চলমান এমন একটি মেশিন থেকে আমি কীভাবে অগ্রণীভাবে এমএসবিল্ডের পাথ পেতে পারি?

আমি এনভায়রনমেন্ট থেকে .NET সংস্করণ পেতে পারি তবে .NET সংস্করণের জন্য সঠিক ফোল্ডারটি পাওয়ার কোনও উপায় আছে কি?

উত্তর:


141

রেজিস্ট্রি চারপাশে হাঁসফাঁস, দেখে মনে হচ্ছে

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

পাওয়ারশেলের মাধ্যমে ক্যোয়ারী (প্রতি মুভিজিপি 0 )

dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\

5
আমি ভিজ্যুয়াল স্টুডিও 2017 আরসি ইনস্টল করেছি এবং বিকাশকারী কমান্ড প্রম্পট শুরু করেছি, এমএসবিল্ড সংস্করণটি 15 + দেব সিএমডি প্রম্পট যে একই এমএসবিল্ডটি ব্যবহার করছে সেটিতে আমি কীভাবে অ্যাক্সেস পাব?
সুপারজেএমএন

6
এমএসবিল্ড 15 ডিগ্রি সেন্টিগ্রেডে রয়েছে: \ প্রোগ্রাম ফাইলগুলি (x86) \ মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও \ 2017 \ এন্টারপ্রাইজ \ এমএসবিল্ড \ 15.0 \ বিন \ এমডি 64`
n জিউস

2
আপনি যদি সেখানে VS2017 ইনস্টল করেন তবেই আমি এমএস বিল্ডটুলসপথের 15.0 টি টুলসেটের জন্য রেজিস্ট্রিতে একটি প্রবেশিকা পয়েন্ট খুঁজে পাইনি
প্যাসিভ

8
ডকস.মাইক্রোসফট.ইন.ইউস / ভিউজুয়ালস্টুডিও / এসএসবিল্ড/… "এমএসবাইল্ড এখন ভিজ্যুয়াল স্টুডিওর প্রতিটি সংস্করণের অধীনে একটি ফোল্ডারে ইনস্টল করা আছে example উদাহরণস্বরূপ, সি: \ প্রোগ্রাম ফাইল (x86) \ মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও \ 2017 \ এন্টারপ্রাইজ \ এমএসবিল্ড "এবং" টুলস সংস্করণ মানগুলি আর রেজিস্ট্রিতে আর সেট করা নেই "
হুলভেজ

2
@ ওআরএম্পার মাইক্রোসফ্ট গিজহাবের উপর ভিজ্যুয়াল স্টুডিও 2017 / এমএসবিল্ড 15.x উদাহরণগুলির পথ নির্ধারণের জন্য একটি প্রকল্প সরবরাহ করে । এটি একক নির্বাহযোগ্য যা আপনার বিল্ড সফ্টওয়্যার / স্ক্রিপ্টগুলি ব্যবহার করতে পারে।
ড্যান্টন

140

আপনি কমান্ড লাইনে এমএসবিল্ড.এক্সির পথ মুদ্রণ করতে পারেন:

reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath

1
দয়া করে মনে রাখবেন যে আপনি যদি উইন্ডোজ ফোন অ্যাপ বানাতে চান তবে তার জন্য 32 বিট এমএসবিল্ড দরকার। রেজিস্ট্রি জিজ্ঞাসা করা একটি 64 বিট মেশিনে কেবলমাত্র 64 বিট এমএসবিল্ড দেয়।
ভিক্টর আইনেস্কু

2
@VictorIonescu: আপনি ব্যবহার করতে পারেন /reg:32বা /reg:64উভয় bitnessess উপর cmd(অথবা যাই হোক না কেন প্রক্রিয়ায় আপনার দৌড়াচ্ছে) স্পষ্টভাবে সেই পথ পেতে।
সাইমন বুচান

এক আপনি সম্ভবত চান আসলে অন্যত্র দেখতে হয় - এই আপনি একটি পুরানো (4.0) অবস্থান পাথ দেব stackoverflow.com/questions/32007871/...
JonnyRaa

আমার ক্ষেত্রে এটির অধীনে ছিলComputer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath
সেন জ্যাকব

32

আপনি যদি নেট 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

2
$dotNetVersion12.0 (বনাম 2013) এবং 14.0 (বনাম 2015) এর জন্যও (যদি ইনস্টল থাকে তবে) কাজ করে
জুলিয়ান

4
ভিএস 2017 এর জন্য কাজ করে না, যা HKLM:\software\Microsoft\MSBuild\ToolsVersionsকী এর অধীনে কোনও মান যুক্ত করে না । পরিবর্তে আপনার ভিএস2017 ইনস্টল দির কাছ থেকে নেওয়া দরকার HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStud‌​io\SxS\VS7\15.0, তারপরে MSBuild\15.0\Bin\MSBuild.exeএমএসবিল্ড EXE অবস্থান পেতে যোগ করুন ।
ইয়ান কেম্প

30

উইন্ডোজ 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=জন্য? এটি প্রয়োজনীয় বা আপনার সেটআপের কেবল একটি শৈল্পিক?
এলিসি

@ এলিসি উফ, দুঃখিত, এটি একটি অনুলিপি / পেস্ট টাইপ। আমার পরিবেশে আমি পরিবর্তনশীল কে bb.build.msbuild.exe বলি, আমি যখন উত্তরটি আটকালাম তখন সেই উদাহরণটি ঠিক করতে আমি অবহেলা করেছি। এখনই স্থির, এটি নির্দেশ করার জন্য ধন্যবাদ।
ইয়োও

26

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

1
এই বিষয়ে সেরা উত্তর।
তেওমান শিপাহি

19

এমএসবিল্ড সন্ধানের জন্য নির্দেশাবলী :

  • শক্তির উৎস: &"${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এটি একটি স্বতন্ত্র নির্বাহযোগ্য, যাতে আপনি যে কোনও জায়গা থেকে আপনার ইন্টারনেট সংযোগ আছে এটিকে ডাউনলোড করে চালাতে পারেন। তার অর্থ আপনার বিল্ড স্ক্রিপ্টগুলি পরীক্ষা করতে পারে যে তারা যে পরিবেশে চলছে সেগুলি সঠিকভাবে সেটআপ করা হচ্ছে কিনা, একটি বিকল্পের নামকরণ করতে।


ইতিমধ্যে 3 টি উত্তর রয়েছে যেগুলি কোথাও উল্লেখ করেছে যার মধ্যে একটির নীচে সেই প্রভাবটিতে আপনার মন্তব্য অন্তর্ভুক্ত রয়েছে। এই উত্তর যুক্ত করা উত্তর স্যুপ আরও খারাপ করে তোলে।
jpaugh

4
4 এখন আমি এই উত্তরটি সহায়ক বলে মনে করেছি, যেখানে আমি অন্যান্য ভার্সেস উত্তরগুলি সহায়ক পাইনি।
কাপলিনেটর

উল্লেখযোগ্য যে VSWHERE বলে যে এটি ব্যবহারের জন্য msbuild.exe, এর অর্থ এই নয় যে আপনি যদি msbuildকমান্ড লাইনে টাইপ করেন (বিশেষত ভিজুয়াল স্টুডিও কমান্ড লাইন যদি এটি ব্যবহার করা হয়), তবে এটিই ব্যবহৃত হবে। কি ব্যবহৃত কিনা দেখতে আপনি টাইপ msbuildকমান্ড লাইন এ এই কাজ: where msbuild। এটি যদি ভিএসডাব্লুএর হিসাবে সর্বশেষতম এবং সর্বশ্রেষ্ঠটি বলে তেমনটি জানাচ্ছে না, তবে আপনি যেটি msbuild.exeব্যবহার করতে চান তার একটি সম্পূর্ণ পথ আপনাকে করতে হবে বা আপনার প্যাথ ভেরিয়েবলের সাথে সামঞ্জস্য করতে হবে।
জিন্লি

সুতরাং পরের প্রশ্নটি কীভাবে আপনি কোথাও যাওয়ার পথটি খুঁজে পাবেন ....
বিজুরি

17

@ অ্যালেনস্যানোবনের একটি দুর্দান্ত পাওয়ার শেল সংস্করণ রয়েছে তবে কিছু লোকের বিল্ডগুলির জন্য কেবল ব্যাচের স্ক্রিপ্ট ব্যবহার করার প্রয়োজন রয়েছে।

এটি @ 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

2
দ্রষ্টব্য: যেহেতু ভিএস2017 / এমএসবিল্ড 15.x তাদের পাথগুলির জন্য রেজিস্ট্রি ব্যবহার করে না, এমএসবিল্ড পাথ নির্ধারণের জন্য বনাম কোথাও একটি বিকল্প।
ড্যান্টন

1
এছাড়াও, আজিজআতিফ লোকটি। 15.1 বিল্ডগুলির জন্য এটির
জেজেএস

2
এছাড়াও, কোথাও চকোলেটির মাধ্যমে ইনস্টল করা যেতে পারে: chocolatey.org/packages/vswhere
কাপলিনেটর

6

এটি ভিজ্যুয়াল স্টুডিও 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

}


3
বিল্ড সরঞ্জামগুলির জন্য, গিথুব / মাইক্রোসফট /vswhere/wiki/Findvswhere -products * - MSBuild এ উল্লিখিত হিসাবে ব্যবহার করুন ।
টিএন

ভার্সেসের জন্য আপনার কোথায় কোথায় এটি অবস্থিত তা জানতে হবে। এবং অবশ্যই আপনার বিল্ড সিস্টেমের জন্য পাওয়ার-শেল পাওয়া উচিত। শুধু একটি প্রশ্ন: কেন amd64? এটি নির্মাণের জন্য নির্দিষ্ট কিছু আছে?
ম্যাক্সিম

আপভোটেড কারণ এই সমাধানটি মূলত এমএসবিল্ড 15 এর জন্য একটি রেজিস্ট্রি কী ব্যবহার করে, তৃতীয় পক্ষের লাইব্রেরি বা স্ক্রিপ্ট নয়। কৌতূহলের বাইরে, "SxS \ VS7" কী বোঝায়? এটি কি ভিএস সংস্করণ জুড়ে বৈধ থাকবে?
লাজলো

5

রেজিস্ট্রি অবস্থান

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5

এক্সিকিউটেবলের জন্য লোকেশন দিন।

তবে আপনার যদি টাস্ক এক্সটেনশানগুলি সংরক্ষণ করতে হয় এমন স্থানের প্রয়োজন হয় তবে এটি চালু

%ProgramFiles%\MSBuild

4
এটি বেশ পুরানো, আমি জানি - তবে যাইহোক: x64-সিস্টেমে, এমএসবাইল্ড-ফোল্ডারটি প্রোগ্রামফায়ালে (x86)
সাসাচায়

4

পাওয়ারশেলটি খোলা এবং প্রবেশ করা সহজ উপায় হতে পারে

dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\

4

@ 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

ওয়াইল্ডকার্ড তারকারা হলেন:

  • বছর (2017)
  • ভিজ্যুয়াল স্টুডিও সংস্করণ (সম্প্রদায়, পেশাদার, উদ্যোগ)
  • সরঞ্জাম সংস্করণ (15.0)

সচেতন থাকুন যে এই আদেশটি বর্ণমালা দ্বারা অর্ডার করা অভিব্যক্তিটির সাথে মেলে এমন প্রথম পথটি নির্বাচন করছে। এটিকে সঙ্কুচিত করতে কেবল নির্দিষ্ট উপাদানগুলি সহ ওয়াইল্ডকার্ডগুলি প্রতিস্থাপন করুন eg বছর বা সরঞ্জাম সংস্করণ।


3

উইন্ডোজ 2003 এবং তারপরে, এই কমান্ডটি সেমিডিতে টাইপ করুন:

cmd> where MSBuild
Sample result: C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

যদি কিছু না উপস্থিত হয়, তার অর্থ হ'ল .NET কাঠামোটি সিস্টেম PATH এ অন্তর্ভুক্ত নয়। এমএসবিল্ডটি .NET ইনস্টলেশন ফোল্ডারে, নেট সংকলক (vbc.exe, csc.exe) এর সাথে থাকা উচিত


এই উত্তরটি অন্যান্য উত্তরের চেয়ে বেশি যোগ করে না। এটি এই উত্তরের
দৃ --়

3

এমএসবিল্ড 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)

একটি মতে পূর্ববর্তী উত্তর , 2017 করে রেজিস্ট্রি এই তথ্য সত্য দোকান।
jpaugh

2

রেজিস্ট্রি ডাব্লু / ও অতিরিক্ত সরঞ্জাম থেকে ব্যাচ সহ এমএসবিল্ড 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

আরও ভাল সরঞ্জাম উপলব্ধ:


1
আপনি আমার জীবন বাঁচালেন
হাকান ফাস্টিক

ইতিমধ্যে এটির পাওয়ারশেল সংস্করণ রয়েছে। প্রায় 2017, পাওয়ারশেল শেখার এড়াতে কি কোনও কারণ আছে?
jpaugh

2
@jpaugh প্রতিটি বিল্ড সিস্টেমে পাওয়ারশেল উপলব্ধ থাকে না।
রোয় ড্যান্টন

1

আপনি এখানে যুক্ত করার মতো অনেক কিছুই ভাববেন না, তবে সম্ভবত সমস্ত সংস্করণ জুড়ে এটি একীকরণের উপায়। আমি এর সাথে আসতে ভেসোয়ার (ভিএস ২০১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
}

1

অনেক সঠিক উত্তর আছে। তবে, এখানে পাওয়ারশেলের একটি ওয়ান-লাইনার আমি অতি সাম্প্রতিক সংস্করণের জন্য এমএসবিল্ড পথ নির্ধারণ করতে ব্যবহার করি :

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\' | 
    Get-ItemProperty -Name MSBuildToolsPath | 
    Sort-Object PSChildName | 
    Select-Object -ExpandProperty MSBuildToolsPath -first 1

+1 সত্যিই দরকারী! তবে আমার উত্তরে আমি -last 1( -first 1সর্বশেষতম সংস্করণটি পাওয়ার পরিবর্তে ) ব্যবহার করি এবং ফাইলের নামটিও (যথাযথভাবে পুরো পথটি পেতে এবং কেবল ফোল্ডারটিই নয়) সম্মতি জানাতে পারি।
মারিয়ানো দেশানজেকে

1

এই পাওয়ারশেল পদ্ধতিটি একাধিক উত্স থেকে এমএসবিল্ডের পথ পায়। যথাযথ চেষ্টা করা:

  1. প্রথমে বনাম কোথাও ব্যবহার করা (কারণ ভিজ্যুয়াল স্টুডিওতে এমএসবিল্ডের আরও আধুনিক সংস্করণ রয়েছে) উদাহরণস্বরূপ

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe
  2. পাওয়া না গেলে রেজিস্ট্রি চেষ্টা করে (ফ্রেমওয়ার্ক ভার্সন) যেমন

    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
}

0

সঠিক সংস্করণ না জেনে ভিজুয়াল স্টুডিও 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)।


0

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

0

আপনি যদি দুঃসাহসী হন তবে আপনি সোর্স কোড এবং গিটহাব থেকে এমএসবিল্ডের সর্বশেষ প্রকাশটি এখন https://github.com/Mic Microsoft/msbuild/releases/ এ পেতে পারেন


0

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;
}

-2

আপনি যদি একটি ডেলফি প্রকল্প সংকলন করতে চান তবে এমএসবিল্ড + ডেলফি ২০০9 ব্যবহার করার সময় "প্রকল্পের কোনও লক্ষ্য নেই" প্রকল্পের কোনও লক্ষ্য নেই "দেখুন

সঠিক উত্তর সেখানে বলা হয়েছে: " আরএসভার্স.বাট নামে একটি ব্যাচের ফাইল রয়েছে (এটি আরএডি স্টুডিও ফোল্ডারে সন্ধান করুন)। এমএসবিল্ড কল করার আগে কল করুন এবং এটি প্রয়োজনীয় পরিবেশের ভেরিয়েবল সেটআপ করবে Make ফোল্ডারগুলি আরএসওয়ারে সঠিক কিনা তা নিশ্চিত করুন Make .bat যদি আপনার ডিফল্টর চেয়ে আলাদা জায়গায় সংকলক থাকে ""

এই ব্যাটটি যথাযথ MSBuild.exe সংস্করণ সহ উপযুক্ত .NET ফোল্ডারে PATH এনভায়রনমেন্ট ভেরিয়েবলটি আপডেট করবে না, তবে অন্যান্য প্রয়োজনীয় ভেরিয়েবলগুলিও নিবন্ধভুক্ত করবে।


এই উত্তরটি ডেল্ফি-সম্পর্কিত নয় এবং ডেলফি ব্যবহারকারীদের জন্য আরও দৃ rob় নয়।
নাশেভ

2
ক্ষয়ে যাওয়ার জন্য দুঃখিত আমি আরও শক্তিশালী হিসাবে বোঝাতে চাইছি, কেবল ডেলফির চেয়ে বেশি কাজ করে। এটি ডেলফিতে করার আরও সহজ উপায় হতে পারে তবে ওপি ডেলফির বিষয়ে জিজ্ঞাসা করেনি এবং এই থ্রেডের কিছু 18 টি উত্তর রয়েছে যা খুব কম লোকই দেখতে পাবে। যদি অন্যদের এটি দেখতে আপনার পক্ষে গুরুত্বপূর্ণ হয় তবে আমি আপনাকে সুপারিশ করব যে আপনি একটি নতুন প্রশ্ন দেলফির জন্য নির্দিষ্ট করুন এবং স্ব-জবাব তৈরি করুন। আমরা যদি এমএসবিল্ডের প্রতিটি সংস্করণকে covered বা এরও কম উত্তরগুলি কভার করি তবে আমি খুব খুশি হব
jpaugh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.