project.json
からVS2017で導入された新しいcsproj
形式への移行により、dotnet
cliと新しいmsbuild
の違いと使用するタイミングを理解するのに苦労しています上下に。
1)コマンドラインから新しいcsproj
netstandardライブラリを構築するには、dotnet
cli(たとえばdotnet restore
dotnet build
)を呼び出すか、msbuild
を使用する必要があります(たとえば、msbuild ExampleNetstandard.sln
)。
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
には、_dotnet new
_など、msbuild
にはない機能がいくつかあります。私の意見では、dotnet
はmsbuild
よりも使いやすいので、dotnet
を好みます。
わかりやすくするために、投稿の最後にmsbuild
とdotnet
の比較を追加しました。
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」
それを削除すると、証拠があります:
プロパティで確認できるように、msbuild.dllは実際にはmsbuild.exeです。
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);
_
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 :( にマークダウンテーブルなし