Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Poniższe procedury mogą pomóc w diagnozowaniu problemów z kompilacją w projekcie programu Visual Studio, a w razie potrzeby utworzyć dziennik do wysłania do firmy Microsoft w celu zbadania.
Wartość właściwości jest ignorowana
Jeśli właściwość projektu jest ustawiona na określoną wartość, ale właściwość nie ma wpływu na kompilację, wykonaj następujące kroki:
Otwórz wiersz polecenia dla deweloperów programu Visual Studio odpowiadający twojej wersji programu Visual Studio.
Uruchom następujące polecenie, po zastąpieniu wartości ścieżki rozwiązania, konfiguracji i nazwy projektu:
MSBuild /p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /pp:out.xml MyProject.vcxprojTo polecenie tworzy plik projektu MSBuild "wstępnie przetworzony" (out.xml). Możesz wyszukać konkretną właściwość, aby zobaczyć, gdzie jest ona zdefiniowana.
Ostatnia definicja właściwości jest tym, z czego korzysta kompilacja. Jeśli właściwość jest ustawiana dwukrotnie, druga wartość zastępuje pierwszą. Ponadto program MSBuild ocenia projekt w kilku etapach.
- GrupyWłaściwości i Importy
- ItemDefinitionGroups
- Grupy elementów
- Targets
Zatem, biorąc pod uwagę następującą kolejność:
<PropertyGroup>
<MyProperty>A</MyProperty>
</PropertyGroup>
<ItemGroup>
<MyItems Include="MyFile.txt"/>
</ItemGroup>
<ItemDefinitionGroup>
<MyItems>
<MyMetadata>$(MyProperty)</MyMetadata>
</MyItems>
</ItemDefinitionGroup>
<PropertyGroup>
<MyProperty>B</MyProperty>
</PropertyGroup>
Wartość MyMetadata dla elementu MyFile.txt jest obliczana do B podczas kompilacji (nie A i nie jest pusta).
Kompilacja przyrostowa buduje więcej niż powinna
Jeśli program MSBuild niepotrzebnie kompiluje projekt lub element projektu, utwórz szczegółowy lub binarny dziennik kompilacji. Możesz wyszukać w dzienniku plik, który został utworzony lub skompilowany niepotrzebnie. Dane wyjściowe wyglądają mniej więcej tak:
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
Jeśli tworzysz w środowisku IDE programu Visual Studio (ze szczegółową szczegółowością okna danych wyjściowych), w oknie Dane wyjściowe zostanie wyświetlona przyczyna, dla której każdy projekt nie jest 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.
Tworzenie szczegółowego dziennika
- Otwórz okienko Opcje narzędzi> i rozwiń sekcję Wszystkie ustawienia>>.
- Otwórz okno dialogowe Opcje narzędzi> i rozwiń sekcję Projekty i rozwiązania>.
Użyj list rozwijanych i ustaw zarówno opcję szczegółowości wyjścia kompilacji projektu MSBuild, jak i opcję szczegółowości pliku dziennika kompilacji projektu MSBuild na Szczegółowy.
Pierwszy steruje szczegółowością kompilacji w oknie danych wyjściowych , a drugi steruje szczegółowością kompilacji w
{projectname}.logpliku utworzonym w katalogu pośrednim każdego projektu podczas kompilacji.W wierszu polecenia dewelopera środowiska Visual Studio wprowadź jedno z tych poleceń, zamieniając rzeczywiste wartości ścieżki i konfiguracji.
MSBuild /p:Configuration="MyConfiguration";Platform="x86" /fl MySolution.slnlub
MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxprojPlik
MSBuild.logjest tworzony w katalogu, z którego uruchomiono program MSBuild.
Podaj dzienniki binarne programu MSBuild na potrzeby badania
Program MSBuild ma możliwość przechwytywania szczegółowego pliku dziennika binarnego. Jeśli masz problem z kompilacją i możesz podać dziennik binarny, dziennik może być przydatny do zbadania problemu.
Należy jednak pamiętać, jakiego typu informacje są przechwytywane w dzienniku binarnym, aby upewnić się, że nie udostępniasz przypadkowo więcej niż zamierzasz. Dziennik binarny przechwytuje prawie wszystko, co robi kompilacja, w tym zawartość plików projektu i wszystkich plików (takich jak .props i .targets), które importują, wszystkie zadania uruchamiane podczas kompilacji, a także dane wejściowe i wyjściowe, a także zmienne środowiskowe, do których uzyskiwano dostęp w tej sesji programu MSBuild. Zazwyczaj nie zawiera on zawartości skompilowanych plików źródłowych, ale przechwytuje ich pełne nazwy i ścieżki.
Uwaga / Notatka
Niektóre środowiska kompilacji udostępniają tajne dane przy użyciu zmiennych środowiskowych. Przed udostępnieniem dziennika binarnego upewnij się, że nie uwidacznia tokenów interfejsu API ani innych ważnych wpisów tajnych.
Przechwytywanie dzienników binarnych dla kompilacji za pomocą wiersza poleceń
Dziennik binarny można utworzyć, przekazując -bl parametr do programu MSBuild (MSBuild.exe lub dotnet build). Zawartość wygenerowanego pliku można eksplorować przy użyciu .binlog MSBuild lub w przeglądarce przy użyciu podglądu dzienników strukturalnych na żywo. Program MSBuild nie przechwytuje żadnych danych z dzienników binarnych wyświetlanych w przeglądarce.
Przykłady
dotnet build -bl
dotnet build -bl:SpecificStep.binlog
MSBuild.exe -bl:ServiceRelease.binlog -p:Configuration=Release
Zobacz również więcej szczegółów na temat dzienników binarnych.
Przechwytywanie dzienników binarnych za pomocą programu Visual Studio
Aby przechwycić dzienniki dla wszystkich wywołań programu MSBuild:
Ustaw MSBUILDDEBUGENGINE zmienną środowiskową na '1' i (opcjonalnie) ustaw na MSBUILDDEBUGPATH istniejący folder docelowy, aby przechowywać przechwycone dzienniki. Następnie uruchom program Visual Studio z tej samej powłoki, aby odziedziczyć ustawienia środowiska.
SET MSBUILDDEBUGENGINE=1
SET MSBUILDDEBUGPATH=C:\MSBuildReproLogs
devenv.exe MySolution.sln
$env:MSBUILDDEBUGENGINE = 1
$env:MSBUILDDEBUGPATH="C:\MSBuildReproLogs"
& "devenv.exe" MySolution.sln
Dzienniki binarne programu MSBuild są następnie przechwytywane do lokalizacji określonej za pomocą MSBUILDDEBUGPATH zmiennej środowiskowej (lub domyślnie do MSBuild_Logs podfolderu bieżącego folderu lub %temp%, na podstawie praw dostępu).
Uwaga / Notatka
Logi są zapisywane dla każdego wywołania programu MSBuild (w tym kompilacji w czasie projektowania) i przechowywane w folderze bez usuwania starszych, co powoduje, że liczba plików dziennika może szybko się zwiększać. Zaleca się ustawienie zmiennej środowiskowej opt-in tylko na krótki czas potrzebny do odtworzenia problemu do analizy (choć zrozumiałe jest, że niektóre niedeterministyczne problemy mogą wymagać wielu prób odtworzenia).
Tworzenie binarnego dziennika MSBuild przy użyciu rozszerzenia Project System Tools
Zapoznaj się z tym przewodnikiem w repozytorium Project System Tools, aby przechwytywać dzienniki binlogów za pomocą programu Visual Studio.
Pobierz i zainstaluj rozszerzenie Project System Tools.
Po zainstalowaniu rozszerzenia niektóre nowe elementy są wyświetlane w menu Wyświetl>inne okna.
Wybierz Widok>Inne okna>Rejestrowanie kompilacji, aby wyświetlić okno Rejestrowanie kompilacji w programie Visual Studio. Wybierz pierwszą ikonę paska narzędzi, aby rozpocząć rejestrowanie zarówno regularnych, jak i projektowych kompilacji w systemie projektu.
Po zarejestrowaniu kompilacji zostanie ona wyświetlona w oknie Rejestrowanie kompilacji. Kliknij prawym przyciskiem myszy element i wybierz polecenie Zapisz dzienniki w menu kontekstowym, aby zapisać
.binlogplik.
Pliki .binlog można wyświetlać i przeszukiwać przy użyciu przeglądarki dzienników strukturalnych MSBuild.