1. ホーム
  2. visual-studio

[解決済み] dotnet cli と vs2017 msbuild の関係

2022-11-13 04:27:13

質問

からの移行に伴い project.json から新しい csproj という形式がVS2017で導入されましたが、その違いを理解するのに苦労しています。 dotnet cli と新しい msbuild とを比較し、どのような場合にどちらを使うべきかを説明します。

1) 新しい csproj netstandard ライブラリをコマンドラインからビルドするために dotnet cli (例えば dotnet restore dotnet build ) または msbuild (例えば msbuild ExampleNetstandard.sln ).

2) また、私の理解では、2つのバージョンの msbuild には 2 つのバージョンがあり、1 つはフル フレームワークで構築され、もう 1 つは 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 に移動し、ビルド dotnet の上に msbuild .

dotnet にはない機能があります。 msbuild のように dotnet new . 私の意見では dotnet よりも使いやすいと思います。 msbuild よりも使いやすいので、私は dotnet .

より分かりやすくするために、比較対象である msbuilddotnet を私の投稿の最後に追加してください。

  1. また、私の理解では、msbuild には 2 つのバージョンがあり、1 つはフル フレームワークで構築され、もう 1 つは dotnet core をターゲットにしています。これは正しいですか?私は常にドットネットのバージョンを使用する必要があります。

msbuildは1つしかありません。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:³³ Files³dotnet³sdk1.0.3³MSBuild.dll"

それを削除すれば、証明はあります。

msbuild.dllは、プロパティを見ればわかるように、実際にはmsbuild.exeです。

いくつかのコード

dotnet CLI のコードを見てみると、以下のようなものが生成されていることがわかります。 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);

の間のマッピング 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にmarkdownテーブルがない :(