web-dev-qa-db-ja.com

dotnet CLIと新しいvs2017 msbuildの関係

project.jsonからVS2017で導入された新しいcsproj形式への移行により、dotnet cliと新しいmsbuildの違いと使用するタイミングを理解するのに苦労しています上下に。

1)コマンドラインから新しいcsproj netstandardライブラリを構築するには、dotnet cli(たとえばdotnet restoredotnet build)を呼び出すか、msbuildを使用する必要があります(たとえば、msbuild ExampleNetstandard.sln)。

2)また、私の理解では、msbuildには2つのバージョンがあり、1つは完全なフレームワーク上に構築され、もう1つはdotnet coreを対象としています。これは正しいです?常にdotnet versionを使用する必要がありますか

3)dotnet cliはスタンドアロンですか、またはmsbuildをインストールする必要がありますか?たとえば、dotnet SDKをインストールすると、msbuildもインストールされますか?その場合、これはvs2017でインストールされるバージョンとは異なりますか?

59
kimsagro

ご質問

1)コマンドラインから新しいcsproj netstandardライブラリをビルドするには、dotnet cli(dotnet restore dotnet buildなど)を呼び出すか、msbuild(msbuild ExampleNetstandard.slnなど)を使用する必要があります。

現在、dotnetmsbuildの上に構築されているため、どちらも問題ありません。だから、それは好みの問題です。また、dotnet CLIを使用してmsbuildタスクを呼び出すこともできます。 (_dotnet msbuild <msbuild_arguments>_)

当初、すべての.NETコアはdotnetにのみあり、msbuildにはありませんでした。 msbuildに既に構築されている多くのものがdotnetですぐに動作しないため、これは面倒でした(例:Xamarin)。そこで、彼らはmsbuildにデータを移動し、dotnetの上にmsbuildを構築しました。

dotnetには、_dotnet new_など、msbuildにはない機能がいくつかあります。私の意見では、dotnetmsbuildよりも使いやすいので、dotnetを好みます。

わかりやすくするために、投稿の最後にmsbuilddotnetの比較を追加しました。

2)また、私の理解では、msbuildには2つのバージョンがあり、1つは完全なフレームワーク上に構築され、もう1つはdotnetコアを対象としています。これは正しいです?常にドットネットバージョンを使用する必要がありますか

Msbuildは1つだけです。 dotnet CLIはmsbuildを使用しています:

CLIはMSBuildをビルドエンジンとして使用するため、ツールのこれらの部分をカスタムMSBuildターゲットおよびタスクとして作成することをお勧めします。これらの部分は、ビルドプロセス全体に参加できるためです。

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

msbuildの古いバージョンには、.NET Coreサポートがありませんでした。多分それは他のバージョンです;)

数か月前とは大きく異なっていたため、混乱を招くことに同意します。

3)dotnet cliはスタンドアロンですか、msbuildをインストールする必要がありますか?たとえば、dotnet SDKをインストールすると、msbuildもインストールされますか?その場合、これはvs2017でインストールされるバージョンとは異なりますか?

これについてはわかりませんでしたが、テストは簡単でした。すべてのmsbuild.exeを削除しましたが、まだ機能していました。 SDKフォルダーのmsbuild.dllを使用していることがわかりました。例えば「C:\ Program Files\dotnet\sdk\1.0.3\MSBuild.dll」

それを削除すると、証拠があります:

When msbuild.dll removed

プロパティで確認できるように、msbuild.dllは実際にはmsbuild.exeです。

msbuild.dll properties of SDK 1.0.3

いくつかのコード

Dotnet CLIのコードを見ると、msbuildコマンドを生成していることがわかります。

たとえば、_dotnet restore_は、 RestoreCommand class in dotnet CLI によって作成されます。

剥ぎ取られたバージョン:

_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);
_

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 SO :( にマークダウンテーブルなし

97
Julian