प्रशन
1) कमांड लाइन से एक नई csproj netstandard लाइब्रेरी बनाने के लिए, क्या मुझे डॉटनेट क्ली (उदाहरण के लिए डॉटनेट रिस्टोर डॉटनेट बिल्ड) का उपयोग करना चाहिए या msbuild (उदाहरण के लिए msbuild exampleNetstandard.sln) का उपयोग करना चाहिए।
दोनों ठीक करते हैं क्योंकि वर्तमान dotnet
में शीर्ष पर बनाया गया है msbuild
। तो यह स्वाद की बात है। आप डॉटनेट CLI का उपयोग करके भी msbuild कार्य कह सकते हैं। ( dotnet msbuild <msbuild_arguments>
)
शुरुआत में, सभी .NET कोर सामान केवल में dotnet
और अंदर नहीं था msbuild
। यह बहुत सारे सामान के रूप में बोझिल था जो पहले से ही निर्मित msbuild
था dotnet
, बॉक्स से बाहर काम नहीं कर रहा था (उदाहरण के लिए ज़मारिन)। इसलिए वे सामान को ऊपर ले गए msbuild
और उसके dotnet
ऊपर निर्माण किया msbuild
।
dotnet
कुछ विशेषताएं हैं जो अंदर नहीं हैं msbuild
, जैसे dotnet new
। मेरी राय में, dotnet
का उपयोग करना आसान है msbuild
, इसलिए मैं पसंद करता हूं dotnet
।
इसे और अधिक स्पष्ट करने के लिए, मैंने अपनी पोस्ट के अंत में msbuild
और उसके बीच एक तुलना जोड़ी है dotnet
।
2) इसके अलावा, मेरी समझ यह है कि msbuild के दो संस्करण हैं, एक पूर्ण फ्रेमवर्क पर बनाया गया है और दूसरा लक्ष्य डॉटनेट कोर है। क्या ये सही है? क्या मुझे हमेशा डॉटनेट संस्करण का उपयोग करना चाहिए
केवल एक msbuild है। डॉटनेट CLI msbuild का उपयोग कर रहा है:
चूंकि CLI MSBuild को इसके निर्माण इंजन के रूप में उपयोग करता है, इसलिए हम अनुशंसा करते हैं कि टूल के इन हिस्सों को कस्टम MSBuild लक्ष्य और कार्यों के रूप में लिखा जाए, क्योंकि वे तब समग्र निर्माण प्रक्रिया में भाग ले सकते हैं
https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility
पुराने संस्करण में msbuild
.NET कोर सपोर्ट की कमी थी। शायद वह दूसरा संस्करण है;)
मैं मानता हूं कि यह भ्रामक है, क्योंकि यह कुछ महीने पहले बहुत अलग था।
3) क्या डॉटनेट क्लि स्टैंडअलोन है या क्या इसे स्थापित करने के लिए msbuild की आवश्यकता है? उदाहरण के लिए, जब आप डॉटनेट एसडीके स्थापित करते हैं तो क्या यह एमएसबिल्ट को भी स्थापित करता है? यदि ऐसा है तो यह उस संस्करण से भिन्न है जिसे vs2017 के साथ स्थापित किया गया है?
मुझे इस पर यकीन नहीं था, लेकिन यह परीक्षण करना आसान था। मैंने सभी msbuild.exe हटा दिए हैं और यह अभी भी काम कर रहा है। पता चला कि यह SDK फ़ोल्डर में msbuild.dll का उपयोग कर रहा है। उदाहरण के लिए "C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ MSBuild.dll"
यदि आप उस एक को हटाते हैं, तो एक प्रमाण है:
msbuild.dll वास्तव में msbuild.exe है, जैसा कि आप गुणों में देख सकते हैं:
कुछ कोड
यदि आप डॉटनेट सीएलआई के कोड को देखते हैं, तो आप देख सकते हैं कि यह msbuild
कमांड उत्पन्न कर रहा है ।
उदाहरण के लिए dotnet restore
, RestoreCommand
डॉटनेट सीएलआई के अंदर वर्ग द्वारा बनाया गया है ।
एक छीन लिया संस्करण:
public class RestoreCommand : MSBuildForwardingApp
{
...
public static RestoreCommand FromArgs(string[] args, string msbuildPath = null)
{
var result = parser.ParseFrom("dotnet restore", args);
...
var msbuildArgs = new List<string>
{
"/NoLogo",
"/t:Restore",
"/ConsoleLoggerParameters:Verbosity=Minimal"
};
...
return new RestoreCommand(msbuildArgs, msbuildPath);
}
public static int Run(string[] args)
{
RestoreCommand cmd;
try
{
cmd = FromArgs(args);
}
catch (CommandCreationException e)
{
return e.ExitCode;
}
return cmd.Execute();
}
...
}
आप देख सकते हैं dotnet restore
बस बुला रहा हैmsbuild /NoLogo /t:Restore /ConsoleLoggerParameters:Verbosity=Minimal
यदि आप RestoreCommand
के समय मेंdotnet v1.0.0 RC2
जांच करते हैं , तो यह उपयोग नहीं कर msbuild
रहा था लेकिन nuget
सीधे कॉल कर रहा था ।
return NuGet3.Restore(args, quiet);
dotnet
और के बीच मैपिंगmsbuild
मैंने dotnet
और के बीच एक मैपिंग की msbuild
। यह पूर्ण नहीं है, लेकिन महत्वपूर्ण आदेश हैं।
Dotnet | Msbuild | Remarks
-----------------------|--------------------------------------------|---------------------------------
Add | |
-----------------------|--------------------------------------------|---------------------------------
Build | /t:Build |
-----------------------|--------------------------------------------|---------------------------------
Build --no-incremental | /t:Rebuild |
-----------------------|--------------------------------------------|---------------------------------
Clean | /t:clean |
-----------------------|--------------------------------------------|---------------------------------
Complete | |
-----------------------|--------------------------------------------|---------------------------------
Help | | Help!
-----------------------|--------------------------------------------|---------------------------------
List | |
-----------------------|--------------------------------------------|---------------------------------
Migrate | - |
-----------------------|--------------------------------------------|---------------------------------
Msbuild | | Forwarding all
-----------------------|--------------------------------------------|---------------------------------
New | |
-----------------------|--------------------------------------------|---------------------------------
Nuget | | *
-----------------------|--------------------------------------------|---------------------------------
Pack | /t:pack |
-----------------------|--------------------------------------------|---------------------------------
Publish | /t:publish |
-----------------------|--------------------------------------------|---------------------------------
Remove | |
-----------------------|--------------------------------------------|---------------------------------
Restore | /NoLogo /t:Restore |
/ConsoleLoggerParameters:Verbosity=Minimal |
-----------------------|--------------------------------------------|---------------------------------
Run | /nologo /verbosity:quiet |
/p:Configuration= /p:TargetFramework |
-----------------------|--------------------------------------------|---------------------------------
Sln | | Not in msbuild
-----------------------|--------------------------------------------|---------------------------------
Store | /t:ComposeStore |
-----------------------|--------------------------------------------|---------------------------------
Test | /t:VSTest /v:quiet /nologo |
-----------------------|--------------------------------------------|---------------------------------
Vstest | | Forwarding to vstest.console.dll
*
dotnet nuget: csproj में संकुल जोड़ना / हटाना, nuget.exe का सीमित सेट, तुलना देखें
पुनश्च अतः में कोई markdown टेबल :(
msbuild
NuGet संकुल को पुनर्स्थापित नहीं करता है, इसलिए मुझे नहीं लगता कि आप थोड़ा और अधिक संदर्भ के बिना "दोनों ठीक कर सकते हैं" कह सकते हैं। अन्य भाग अच्छे लगते हैं।