簡體   English   中英

dotnet cli 與新的 vs2017 msbuild 的關系

[英]Relationship between the dotnet cli and the new vs2017 msbuild

隨着從project.json遷移到csproj引入的新csproj格式,我正在努力理解dotnet cli 和新的msbuild之間的區別,以及何時使用一個而不是另一個。

1) 要csproj構建新的csproj netstandard 庫,我應該調用dotnet cli(例如dotnet restore dotnet build )還是使用msbuild (例如msbuild ExampleNetstandard.sln )。

2)另外,我的理解是msbuild有兩個版本,一個建立在完整框架上,另一個針對dotnet core 這樣對嗎? 我應該總是使用dotnet version

3) dotnet cli獨立的還是需要安裝msbuild ?。 例如,當您安裝 dotnet SDK 時,這是否也會安裝 msbuild? 如果是這樣,這與vs2017安裝的版本不同嗎?

問題

  1. 要從命令行構建新的 csproj netstandard 庫,我應該調用 dotnet cli(例如 dotnet restore dotnet build)還是使用 msbuild(例如 msbuild ExampleNetstandard.sln)。

兩者都很好,因為目前dotnet是建立在msbuild之上的。 所以這是一個品味問題。 您還可以使用 dotnet CLI 調用 msbuild 任務。 ( dotnet msbuild <msbuild_arguments> )

一開始,所有 .NET 核心內容僅在dotnet ,不在msbuild 這很麻煩,因為很多已經在msbuild構建的東西在開箱即用的dotnet (例如 Xamarin)上不能很好地工作。 所以他們將這些東西移到msbuild並在msbuild之上構建dotnet

dotnet具有msbuild中沒有的一些功能,例如dotnet new 在我看來, dotnetmsbuild更容易使用,所以我更喜歡dotnet

為了更清楚,我在文章末尾添加了msbuilddotnet之間的比較。

  1. 另外,我的理解是 msbuild 有兩個版本,一個基於完整框架構建,另一個針對 dotnet 核心。 這樣對嗎? 我應該總是使用 dotnet 版本嗎

只有一個 msbuild。 dotnet CLI 正在使用 msbuild:

由於 CLI 使用 MSBuild 作為其構建引擎,我們建議將工具的這些部分編寫為自定義 MSBuild 目標和任務,因為它們可以參與整個構建過程

https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility

舊版本的msbuild缺少 .NET Core 支持。 也許那是另一個版本;)

我同意這令人困惑,因為幾個月前情況非常不同。

  1. dotnet cli 是獨立的還是需要安裝 msbuild? 例如,當您安裝 dotnet SDK 時,這是否也會安裝 msbuild? 如果是這樣,這與vs2017安裝的版本不同嗎?

我不確定這一點,但它很容易測試。 我已經刪除了所有 msbuild.exe 並且它仍然有效。 發現它正在使用 SDK 文件夾中的 msbuild.dll。 例如“C:\\Program Files\\dotnet\\sdk\\1.0.3\\MSBuild.dll”

如果你刪除那個,有一個證明:

當 msbuild.dll 被移除時

msbuild.dll 實際上是 msbuild.exe,您可以在屬性中看到:

SDK 1.0.3 的 msbuild.dll 屬性

一些代碼

如果您查看 dotnet CLI 的代碼,您可以看到它正在生成msbuild命令。

例如dotnet restore ,由dotnet CLI 中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


如果您dotnet v1.0.0 RC2檢查RestoreCommand ,它沒有使用msbuild而是直接調用nuget

return NuGet3.Restore(args, quiet);

dotnetmsbuild之間的映射

我在dotnetmsbuild之間做了一個映射。 它不完整,但重要的命令在那里。

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中沒有降價表:(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM