Какую команду dotnet cli (или команды msbuild) использует Visual Studio при сборке, перестройке и очистке решения? - PullRequest
0 голосов
/ 24 июня 2019

Я хочу знать точные команды dotnet cli, которые Visual Studio использует, когда я собираю / перестраиваю и очищаю решение в своем основном приложении dotnet?

Я знаю, что ядро ​​dotnet cli было построено поверх msbuild, поэтому при запуске Build / Rebuild или Clean Solution Visual Studio использует Команды msbuild напрямую, а не из ядра dotnet cli?

Это правильно?

Если это правильно, я хотел бы знать, какую команду или команды msbuild она использует с тремя действиями:

  1. Построение решения
  2. Восстановление решения
  3. Чистый раствор

А какие команды DotNet Core Cli равны этому?

Я знаю из этого поста ( Связь между dotnet cli и новой vs2017 msbuild ) что следующие команды выполняют сборку, перестройку и очистку в dotnet и msbuild.

Dotnet cli:

  • Сборка: сборка dotnet
  • Перестроить: сборка dotnet --no-incremental
  • Очистить: dotnet clean

MSBuild:

  • Сборка: msbuild / t: сборка
  • Перестроить: msbuild / t: перестроить
  • Очистить: msbuild / t: очистить

Полагаю, это еще не все? Это нормально, но я хотел бы посмотреть, что Visual Studio создает для действий?

И мне интересно, можно ли изменить поведение Visual Studio, чтобы оно выполняло команды dotnet cli вместо msbuid?

Исследование:

Я строил основной веб-API-интерфейс asp.net в Visual Studio (Visual Studio 2017 Enterprise версии 15.9.11)

Я искал вывод в Visual Studio при сборке / перестройке и очистке решения, но не смог найти ничего, связанного с DotNet Core Cli или MSBuild. Затем я пошел в Инструменты VisualStudio / Параметр / «Проект и решение» / «Построить и запустить» и изменил параметры:

  • Детализация выходных данных сборки проекта MSBuild: опробованы опции "Подробно" и "Диагностика"
  • Детализация файла журнала сборки проекта MSBuild: пробовал опции "Подробно" и "Диагностика"

В результате журнал, созданный в окне «Вывод» Visual Studio, был огромным, и его было трудно найти. точная команда, которая будет использоваться для действий. Я вижу, что msbuild используется во многих местах в выводе, но это немного сбивает с толку найти точную команду.

Я также видел этот вопрос ( Использует ли Visual Studio внутри MSBuild и какая именно команда? )

Этот ответ говорит, что:

Цитата:

"Похоже, что параметры командной строки MSBuild не указаны, скорее, API-интерфейсы MSBuild вызываются в Visual Studio. Если не у вас есть исходный код Visual Studio для обратного проектирования, вы не можете получить эквивалентную командную строку. "

То же самое относится и к dotnet core cli msbuild?

Любая помощь или разъяснения по этому вопросу приветствуется.

1 Ответ

1 голос
/ 24 июня 2019

Я знаю, что ядро ​​dotnet cli было построено поверх msbuild, поэтому когда вы запускаете сборку / перестройку или чистое решение Visual Studio использует msbuild Команды напрямую, а не те, что от dotnet core cli?

Для VS2017, я думаю, VS IDE вызывает msbuild.exe напрямую, когда Clean, Build and Rebuild. Вы можете легко проверить эту точку с помощью диспетчера задач или Process Monitor .

Что касается того, что вы упомянули выше: It appears that the MSBuild command line options are not specified, but rather the MSBuild APIs are called within Visual Studio.

Я думаю, что это правильно, но только для более ранних версий (2010,2013). Я тестировал с VS2010, когда выполняю действия, связанные со сборкой в ​​VS, он не вызывает MSBuild.exe. Поэтому msbuild в VS2010 не выполняется как separate process.

Но для VS2017, когда я создаю проекты, ориентированные на ядро ​​.net, при выполнении действий, связанных со сборкой (нажимая кнопку build, clean, rebuild), он, очевидно, вызывает msbuild.exe, как показано ниже: enter image description here

О том, какие команды msbuild на самом деле выполняет VS:

С тех пор VS2017 вызывает msbuild.exe для сборки .net core или .net fx проектов.

На мой взгляд:

Для решения, которое содержит только проект:

Построить решение => msbuild xxx.sln /t:build /p:Configuration=xxx;Platform=xxx

Перестройте решение => msbuild xxx.sln /t:rebuild /p:Configuration=xxx;Platform=xxx => msbuild xxx.sln /t:clean;build /p:Configuration=xxx;Platform=xxx

Очистить раствор => msbuild xxx.sln /t:clean /p:Configuration=xxx;Platform=xxx => msbuild xxx.sln /t:clean

Я думаю, что каждый раз, когда мы нажимаем кнопку Build в VS, он выбирает значение Configuration и Platform из этого поля, потому что эти два параметра обязательно будут переданы в MSBuild.exe.

enter image description here

Кроме того, одну вещь, которую мы можем обнаружить, это то, что в IDE есть процесс проверки перед началом сборки: он проверит, устарел ли файл, а затем определит, нужно ли его собирать или нет. Но это не то, что вы спрашиваете в своей проблеме, и это не влияет на команду, которую вы хотите, поэтому я пропускаю ее.

Также, на этой странице вы можете найти некоторые настройки, связанные с msbuild: enter image description here

Так что на самом деле я думаю, что приведенная выше команда должна добавить некоторые параметры, такие как: msbuild ... -m:8 -v:M.

Кроме того: Хотя я обнаружил, что действие, связанное со строительством, в VS вызовет msbuild.exe напрямую. Я не уверен, что моя команда выше на 100% верна. Боюсь, никто не может это гарантировать, кроме ребят, которые разрабатывают команду меню в VS IDE. Поэтому, если я что-то не так понял, пожалуйста, поправьте меня :))

И если вы просто хотите получить то же самое, что и в VS, вы также можете попробовать devenv.exe . Это единственное место в официальном документе, которое подтверждает, что переключатель сборки выполняет ту же функцию, что и Build Solution menu command в интегрированной среде разработки (IDE).

...