質問
1)コマンドラインから新しいcsproj netstandardライブラリをビルドするには、dotnet cli(たとえば、dotnet restore dotnet build)を呼び出すか、msbuild(たとえば、msbuild ExampleNetstandard.sln)を使用する必要があります。
現在dotnetはの上に構築されているため、どちらも問題なく動作しますmsbuild。だからそれは好みの問題です。dotnetCLIを使用してmsbuildタスクを呼び出すこともできます。(dotnet msbuild <msbuild_arguments>)
当初、すべての.NETコアのものはにのみ含まれdotnetていましたmsbuild。すでに構築さmsbuildれているものの多くがdotnet箱から出してうまく機能していなかったため、これは面倒でした(Xamarinなど)。そこで、彼らはものをに移動し、その上にmsbuild構築しdotnetましたmsbuild。
dotnetのmsbuildように、にない機能がいくつかありますdotnet new。私の意見でdotnetは、よりも使いやすいmsbuildので、私は好みdotnetます。
より明確にするために、投稿の最後にmsbuildとの比較を追加しましたdotnet。
2)また、msbuildには2つのバージョンがあり、1つは完全なフレームワーク上に構築され、もう1つはドットネットコアをターゲットにしていることを理解しています。これは正しいです?常にドットネットバージョンを使用する必要があります
msbuildは1つだけです。dotnetCLIはmsbuildを使用しています。
CLIはビルドエンジンとしてMSBuildを使用するため、ツールのこれらの部分は、ビルドプロセス全体に参加できるため、カスタムMSBuildターゲットおよびタスクとして作成することをお勧めします。
https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility
の古いバージョンにmsbuildは、.NETCoreのサポートがありませんでした。多分それは他のバージョンです;)
数ヶ月前は非常に異なっていたので、混乱することに同意します。
3)dotnet cliはスタンドアロンですか、それともmsbuildをインストールする必要がありますか?たとえば、dotnet SDKをインストールすると、msbuildもインストールされますか?もしそうなら、これはvs2017でインストールされているバージョンとは異なりますか?
これについてはよくわかりませんでしたが、テストは簡単でした。すべてのmsbuild.exeを削除しましたが、それでも機能します。SDKフォルダのmsbuild.dllを使用していることがわかりました。例:「C:\ ProgramFiles \ dotnet \ sdk \ 1.0.3 \ MSBuild.dll」
それを削除すると、証拠があります。

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

いくつかのコード
dotnet CLIのコードを調べると、msbuildコマンドを生成していることがわかります。
たとえばdotnet restore、はRestoreCommanddotnetCLI内のクラスによって作成されます。
ストリップバージョン:
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 SOでダウンなしのテーブル:(
msbuildNuGetパッケージは復元されないため、もう少しコンテキストがないと「どちらも問題ない」とは言えないと思います。他の部分はよさそうだ。