প্রশ্ন
1) কমান্ড লাইন থেকে একটি নতুন সিএসপ্রোজ নেটস্ট্যান্ডার্ড লাইব্রেরি তৈরি করার জন্য, আমি কি ডটনেট ক্লাইকে কল করতে পারি (উদাহরণস্বরূপ ডটনেট পুনরুদ্ধার ডটনেট বিল্ড) অথবা এমএসবিল্ড (উদাহরণস্বরূপ এমসবিল্ড উদাহরণনেটসটেন্ডার্ড.স্লেন) ব্যবহার করা উচিত।
উভয়ই বর্তমানে dotnet
উপরে নির্মিত হিসাবে জরিমানা করে msbuild
। সুতরাং এটি স্বাদের বিষয়। আপনি ডটনেট সিএলআই ব্যবহার করে মিসবিল্ড কার্যগুলিও কল করতে পারেন। ( dotnet msbuild <msbuild_arguments>
)
শুরুতে, সমস্ত .NET কোর স্টাফ কেবল ইন-ইন ছিল dotnet
না msbuild
। এটি অনেকগুলি স্টাফ হিসাবে জটিল ছিল যেটি ইতিমধ্যে নির্মিত msbuild
হয়েছিল dotnet
বাক্সের বাইরে (যেমন জ্যামারিন) ভাল কাজ করছিল না । সুতরাং তারা স্টাফটি সরানো হয়েছে msbuild
এবং dotnet
উপরে তৈরি করুন msbuild
।
dotnet
মতো কিছু বৈশিষ্ট্য রয়েছে যা msbuild
পছন্দ করে না dotnet new
। আমার মতে, এর dotnet
চেয়ে ব্যবহার করা সহজ msbuild
, তাই আমি পছন্দ করি dotnet
।
এটি আরো স্পষ্ট করতে, আমি এর মধ্যে একটি তুলনা যুক্ত করেছেন msbuild
এবং dotnet
আমার পোস্টের শেষে।
2) এছাড়াও, আমার বোধগম্যতা এখানে আছে যে ম্যাসবিল্ডের দুটি সংস্করণ রয়েছে, একটি সম্পূর্ণ ফ্রেমওয়ার্কের উপর নির্মিত এবং অন্যটি টার্গেটিং ডটনেট কোর। এটা কি সঠিক? আমার সবসময় ডটনেট সংস্করণ ব্যবহার করা উচিত
এখানে একটি মাত্র এমসবিল্ড রয়েছে। ডটনেট সিএলআই মিসবিল্ড ব্যবহার করছে:
যেহেতু সিএলআই এমএসবিল্ডকে তার বিল্ড ইঞ্জিন হিসাবে ব্যবহার করে, তাই আমরা সুপারিশ করি যে সরঞ্জামটির এই অংশগুলি কাস্টম এমএসবিল্ড লক্ষ্য এবং কার্য হিসাবে লেখা উচিত, যেহেতু তারা তখন সামগ্রিক বিল্ডিং প্রক্রিয়াতে অংশ নিতে পারে
https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility
এর পুরানো সংস্করণে msbuild
.NET কোর সমর্থন অনুপস্থিত ছিল। সম্ভবত এটি অন্য সংস্করণ;)
আমি একমত যে এটি বিভ্রান্তিকর, কারণ এটি কয়েক মাস আগে খুব আলাদা ছিল।
3) ডটনেট ক্লাইম স্ট্যান্ডএলোন বা এটির জন্য এমএসবিল্ড লাগানো দরকার ?. উদাহরণস্বরূপ আপনি যখন ডটনেট এসডিকে ইনস্টল করেন তখন কি এই ইনস্টলটি এমএসবিল্ডও রাখবে? যদি তাই তবে vs2017 এর সাথে ইনস্টল হওয়া সংস্করণটির থেকে এটি আলাদা কি?
আমি এই সম্পর্কে নিশ্চিত ছিল না, তবে এটি পরীক্ষা করা সহজ ছিল। আমি সমস্ত এমএসবিল্ড.এক্সই অপসারণ করেছি এবং এটি এখনও কাজ করে। এটি এসডিকে ফোল্ডারে এমএসবিল্ড.ডিল ব্যবহার করছে তা খুঁজে পেয়েছি। যেমন "সি: \ প্রোগ্রাম ফাইল \ ডটনেট \ এসডিকে d 1.0.3 \ এমএসবিল্ড.ডিএল"
আপনি যদি এটি অপসারণ করেন তবে একটি প্রমাণ রয়েছে:
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 এরও সীমিত সেট, তুলনা দেখুন
PS তে কোনও মার্কডাউন টেবিল নেই :(
msbuild
নিউগেট প্যাকেজগুলি পুনরুদ্ধার করে না, তাই আমি মনে করি না যে আপনি কিছুটা বেশি প্রসঙ্গ ছাড়াই "উভয়ই করতে পারেন" বলতে পারেন। অন্যান্য অংশগুলি দেখতে ভাল লাগছে।