Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Следующие процедуры помогут диагностировать проблемы сборки в проекте Visual Studio и при необходимости создать журнал для отправки в Корпорацию Майкрософт для изучения.
Значение свойства игнорируется
Если для свойства проекта задано определенное значение, но свойство не влияет на сборку, выполните следующие действия:
Откройте командную строку разработчика Visual Studio, соответствующую вашей версии Visual Studio.
Выполните следующую команду после замены значений пути решения, конфигурации и имени проекта:
MSBuild /p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /pp:out.xml MyProject.vcxprojЭта команда создает файл проекта MSBuild с предварительной обработкой (out.xml). Вы можете выполнить поиск в этом файле по конкретному свойству, чтобы увидеть, где оно указано.
Последнее определение свойства — это то, что использует сборка. Если свойство задано дважды, то второе значение перезаписывает первое. Кроме того, MSBuild оценивает проект в нескольких этапах.
- PropertyGroups и Импорты
- ГруппыОпределенийЭлементов
- ItemGroups
- Targets
Таким образом, учитывая следующий порядок:
<PropertyGroup>
<MyProperty>A</MyProperty>
</PropertyGroup>
<ItemGroup>
<MyItems Include="MyFile.txt"/>
</ItemGroup>
<ItemDefinitionGroup>
<MyItems>
<MyMetadata>$(MyProperty)</MyMetadata>
</MyItems>
</ItemDefinitionGroup>
<PropertyGroup>
<MyProperty>B</MyProperty>
</PropertyGroup>
Значение элемента MyFile.txt оценивается как B во время сборки (не A и не пустое).
Инкрементная сборка создает больше, чем требуется.
Если MSBuild излишне перестраивает проект или элемент проекта, для этого создайте подробный или двоичный журнал сборки. Вы можете искать в журнале файл, созданный или скомпилированный без необходимости. Выходные данные выглядят примерно так:
Task "CL"
Using cached input dependency table built from:
F:\test\Project1\Project1\Debug\Project1.tlog\CL.read.1.tlog
Outputs for F:\TEST\PROJECT1\PROJECT1\PROJECT1.CPP:
F:\TEST\PROJECT1\PROJECT1\DEBUG\PROJECT1.OBJ
Project1.cpp will be compiled because F:\TEST\PROJECT1\PROJECT1\PROJECT1.H was modified at 6/5/2019 12:37:09 PM.
Outputs for F:\TEST\PROJECT1\PROJECT1\PROJECT1.CPP:
F:\TEST\PROJECT1\PROJECT1\DEBUG\PROJECT1.OBJ
Write Tracking Logs:
Debug\Project1.tlog\CL.write.1.tlog
Если вы создаете среду разработки Visual Studio (с подробной детализацией окна вывода), окно вывода отображает причину, по которой каждый проект не up-to-date:
1>------ Up-To-Date check: Project: Project1, Configuration: Debug Win32 ------
1>Project is not up-to-date: build input 'f:\test\project1\project1\project1.h' was modified after the last build finished.
Создание подробного журнала
- Откройте панель Инструменты>Параметры и разверните раздел Все параметры>Проекты и решения>Сборка и выполнение.
- Откройте диалоговое окно"Параметры>" и разверните раздел "Проекты и решения>сборка и запуск".
Используйте раскрывающиеся списки и установите параметры как для детализации выходных данных сборки проекта MSBuild, так и для детализации файла журнала сборки проекта MSBuild в положение Подробно.
Верхний переключатель управляет детализацией вывода в окне вывода, а второй переключатель контролирует детализацию информации в
{projectname}.logфайле, который создаётся в промежуточном каталоге каждого проекта во время сборки.В командной строке разработчика Visual Studio введите одну из этих команд, заменив фактические значения пути и конфигурации:
MSBuild /p:Configuration="MyConfiguration";Platform="x86" /fl MySolution.slnили
MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxprojФайл
MSBuild.logсоздается в каталоге, из который вы запустили MSBuild.
Предоставление двоичных журналов MSBuild для исследования
MSBuild имеет возможность записывать подробный двоичный файл журнала. Если у вас возникла проблема со сборкой и есть возможность предоставить двоичный журнал, он может быть полезен для изучения проблемы.
Однако следует знать, какой тип информации фиксируется в двоичном журнале, чтобы убедиться, что вы не делитесь ею в большем объеме, чем планируете. Двоичный журнал захватывает практически все, что делает ваша сборка, включая содержимое файлов вашего проекта и любые файлы (например, .props и .targets), которые они импортируют, все задачи, выполняемые во время сборки, входные и выходные данные, а также переменные среды, использованные в ходе сессии MSBuild. Обычно он не включает содержимое исходных файлов, скомпилированных, но записывает их полные имена и пути.
Замечание
Некоторые среды сборки предоставляют секреты с помощью переменных среды. Перед тем как делиться двоичным журналом, убедитесь, что он не содержит маркеры API или другие важные секреты.
Запись журналов двоичных данных для командно-строчных сборок
Вы можете создать двоичный журнал, передав -bl параметр в MSBuild (MSBuild.exe или dotnet build). Содержимое созданного .binlog файла можно просмотреть с помощью средства просмотра структурированных журналов MSBuild или в браузере с помощью средства просмотра структурированных журналов в режиме реального времени. MSBuild не записывает данные из двоичных журналов, просмотренных в браузере.
Примеры
dotnet build -bl
dotnet build -bl:SpecificStep.binlog
MSBuild.exe -bl:ServiceRelease.binlog -p:Configuration=Release
Дополнительные сведения о двоичных журналах см. в разделе "Дополнительные сведения".
Запись двоичных журналов с помощью Visual Studio
Чтобы записать журналы для всех вызовов MSBuild:
Установите для переменной среды MSBUILDDEBUGENGINE значение '1', и (по желанию) задайте для MSBUILDDEBUGPATH путь к существующей папке назначения для хранения захваченных журналов. Затем запустите Visual Studio из той же оболочки, чтобы наследовать среду.
SET MSBUILDDEBUGENGINE=1
SET MSBUILDDEBUGPATH=C:\MSBuildReproLogs
devenv.exe MySolution.sln
$env:MSBUILDDEBUGENGINE = 1
$env:MSBUILDDEBUGPATH="C:\MSBuildReproLogs"
& "devenv.exe" MySolution.sln
Затем двоичные журналы MSBuild записываются в расположение, указанное с помощью переменной среды MSBUILDDEBUGPATH (или по умолчанию в подкаталог MSBuild_Logs текущей папки или %temp%, в зависимости от прав доступа).
Замечание
Журналы записываются для каждого вызова MSBuild (включая сборки времени разработки) и хранятся в папке без удаления старых файлов, поэтому количество файлов журналов может быстро увеличиваться. Рекомендуется задать переменную среды согласия только в течение короткого времени воспроизведения проблемы, которую следует исследовать (хотя понятно, что некоторые недетерминированные проблемы могут потребовать нескольких попыток воспроизведения).
Создание двоичного журнала MSBuild с помощью расширения Project System Tools
Ознакомьтесь с этим руководством в репозитории Project System Tools для записи двоичных журналов с помощью Visual Studio.
Скачайте и установите расширение Project System Tools.
После установки расширения некоторые новые элементы отображаются в меню "Просмотр>других окон ".
Выберите Вид>Другие окна>Журнал сборки, чтобы отобразить окно Журнал сборки в Visual Studio. Выберите первый значок панели инструментов, чтобы начать запись регулярных и временных сборок в системе проекта.
После записи сборки он появится в окне ведения журнала сборки. Щелкните элемент правой кнопкой мыши и выберите "Сохранить журналы " в контекстном меню, чтобы сохранить
.binlogфайл.
Вы можете просматривать и искать файлы binlog с помощью средства просмотра структурированных журналов MSBuild.