質問
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
、はRestoreCommand
dotnetCLI内のクラスによって作成されます。
ストリップバージョン:
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でダウンなしのテーブル:(
msbuild
NuGetパッケージは復元されないため、もう少しコンテキストがないと「どちらも問題ない」とは言えないと思います。他の部分はよさそうだ。