[解決済み] dotnet cli と vs2017 msbuild の関係
質問
からの移行に伴い
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でインストールされるバージョンとは異なるのでしょうか?
どのように解決するのですか?
質問
<ブロッククオート- コマンド ラインから新しい 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
.
より分かりやすくするために、比較対象である
msbuild
と
dotnet
を私の投稿の最後に追加してください。
- また、私の理解では、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 対応が欠けていました。もしかしたら、それは別のバージョンかもしれません ;)
数ヶ月前までは全く違っていたので、混乱するのも納得です。
- 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);
の間のマッピング
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 の限定セットも参照。
比較
関連
-
[解決済み】ERROR: ソースファイルを開けない " "
-
[解決済み】「pdbファイルが見つからない、または開けない」Visual Studio C++ 2013
-
[解決済み] Visual Studioでのソリューションファイルの最適な保存場所を教えてください。
-
[解決済み] Visual Studio Express 2005はどこでダウンロードできますか?[クローズド]
-
[解決済み] デバッグ時にCOMコンポーネントの呼び出しからエラーHRESULT E_FAILが返された VS2012
-
[解決済み] Visual StudioでGitを使う【終了しました
-
[解決済み】dotnet core/csprojのAssemblyInfoに相当するもの。
-
[解決済み】"project" nuget configuration is invalid エラーの取得 [重複]。
-
[解決済み】IDEをインストールせずに、ビルドサーバーにVS2017版のmsbuildをインストールするにはどうしたらいいですか?
-
[解決済み】ソリューションでプロジェクトの依存関係を使用する場合、MSBuildは参照(DLLファイル)をコピーしない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio。プロジェクトに既存のフォルダを追加する
-
[解決済み] Visual Studioでのソリューションファイルの最適な保存場所を教えてください。
-
[解決済み] project" nuget configuration is invalid エラーを取得する [重複].
-
[解決済み] エラーメッセージ "制約契約名に一致するエクスポートが見つかりませんでした。"
-
[解決済み] Visual Studioで実際に全ファイル検索を行う方法
-
[解決済み] デバッグビルドのみVisual Studioのポストビルドイベントを実行する方法
-
[解決済み] Visual Studioで2つのファイルを比較する
-
[解決済み] Visual Studio : ショートカットキー : 行の複製
-
[解決済み] VS 2017でデバッグ停止時にブラウザを自動で閉じないようにする方法
-
[解決済み】dotnet core/csprojのAssemblyInfoに相当するもの。