ডটনেট ক্লাইপ এবং নতুন বনাম ২০১ ms এমসবিল্ডের মধ্যে সম্পর্ক


89

থেকে সরানো সঙ্গে project.jsonনতুন csprojVS2017 সঙ্গে পরিচয় করিয়ে দেন ফরম্যাট, আমি এর মধ্যে পার্থক্য বুঝতে সংগ্রাম করছি dotnetCLI এবং নতুন msbuildএবং যখন অন্য এক ব্যবহার করতে।

1) csprojকমান্ড লাইন থেকে একটি নতুন নেট স্ট্যান্ডার্ড লাইব্রেরি তৈরি করার জন্য , আমি কি ক্লাইটি কল করা উচিত dotnet(উদাহরণস্বরূপ dotnet restore dotnet build) বা ব্যবহার msbuild(উদাহরণস্বরূপ msbuild ExampleNetstandard.sln)।

2) এছাড়াও, আমার বোধগম্যতা হ'ল দুটি সংস্করণ রয়েছে msbuild, একটি সম্পূর্ণ কাঠামোর উপর নির্মিত এবং অন্যটি লক্ষ্যবস্তু dotnet core। এটা কি সঠিক? আমি সবসময় ব্যবহার করা উচিতdotnet version

3) dotnet cliএকক হয় বা এটি msbuildইনস্টল করা প্রয়োজন ?. উদাহরণস্বরূপ আপনি যখন ডটনেট এসডিকে ইনস্টল করেন তখন কি এই ইনস্টলটি এমএসবিল্ডও রাখবে? যদি তাই তবে vs2017 এর সাথে ইনস্টল হওয়া সংস্করণটির থেকে এটি আলাদা?

উত্তর:


148

প্রশ্ন

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.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নিউগেট প্যাকেজগুলি পুনরুদ্ধার করে না, তাই আমি মনে করি না যে আপনি কিছুটা বেশি প্রসঙ্গ ছাড়াই "উভয়ই করতে পারেন" বলতে পারেন। অন্যান্য অংশগুলি দেখতে ভাল লাগছে।
লেক্স লি

4
msbuild /t:restoreনতুন পুনরুদ্ধার হয়। কোড সহ এটি দেখিয়েছে। এটি নতুন (আগের মতো মিসবিল্ড ব্যবহার dotnetকরছিল না )
জুলিয়ান

দুর্দান্ত উত্তর .. আমার আরও একটি প্রশ্ন আছে (আমি মূল প্রশ্নটি আপডেট করেছি)। আপনি যদি উত্তর দিতে পারেন যে আমি এটির অনেক প্রশংসা করব এবং আপনার উত্তরটি গ্রহণ করব
কিমসাগ্রো

ভাল প্রশ্ন. আমি নিশ্চিত ছিলাম না এবং এটি পরীক্ষা করেছিলাম। উপসংহার: এটি এর নিজস্ব এমএসবিল্ড.ডিল ব্যবহার করে। পোস্ট আপডেট হয়েছে।
জুলিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.