Fale zmian
Fala zmian to zestaw zmian zachowania w programie MSBuild, z których można zrezygnować, określając określoną flagę jako zmienną środowiskową. Celem tego jest ostrzeżenie przed potencjalnie destrukcyjnymi zmianami, dzięki czemu masz elastyczność dostosowywania się do tych zmian, zanim staną się one standardową funkcjonalnością. Wszystkie funkcje określonej fali zmian można włączać lub wyłączać tylko razem, a nie osobno.
Po uaktualnieniu do nowej wersji programu MSBuild zmiany potencjalnie powodujące niezgodność są domyślnie włączone, ale jeśli funkcja wpłynie negatywnie na kompilację, można łatwo wyłączyć tę falę zmian. Każda fala zmian jest identyfikowana przez numer wersji programu MSBuild (na przykład 16.8), ale ustawienie fali zmian kontroluje tylko niektóre funkcje, które mogą mieć wpływ na proces kompilacji, a nie wszystkie zmiany w tej wersji programu MSBuild. W dalszej części tego artykułu zostanie wyświetlona lista funkcji w każdej fali zmian. Wyłączenie fali zmian powoduje również wyłączenie fal zmian wyższych wersji.
Rezygnacja z funkcji fal zmian
Aby wyłączyć funkcje w fali zmian, ustaw zmienną środowiskową na falę MSBuildDisableFeaturesFromVersion
zmian (lub wersję programu MSBuild), która zawiera funkcję, którą chcesz wyłączyć. Jest to wersja programu MSBuild, dla którego zostały opracowane funkcje. Zobacz mapowanie fal zmian na funkcje poniżej.
WARTOŚCI MSBuildDisableFeaturesFromVersion
Jeśli nie ustawisz MSBuildDisableFeaturesFromVersion
prawidłowej fali, zostanie wyświetlone ostrzeżenie i/lub ustawienie domyślne dla określonej fali zmian. W poniższej tabeli przedstawiono możliwe ustawienia:
MSBuildDisableFeaturesFromVersion Wartość |
Result | Otrzymujesz ostrzeżenie? |
---|---|---|
Unset | Włącz wszystkie fale zmian, co oznacza, że wszystkie funkcje za każdą falą zmian są włączone. | Nie. |
Dowolna prawidłowa i bieżąca fala zmian (na przykład 16.8 ) |
Wyłącz wszystkie funkcje za falą 16.8 zmian i wyższe. |
Nie. |
Nieprawidłowa wartość (na przykład 16.9 gdy prawidłowe fale to 16.8 i 16.10 ) |
Ustawienie domyślne najbliższej prawidłowej wartości (rosnąco). Na przykład ustawienie 16.9 będzie domyślnie mieć wartość 16.10 . |
Nie. |
Poza rotacją (na przykład 17.1 gdy najwyższa fala to 17.0 ) |
Zaciśnięty do najbliższej prawidłowej wartości. Na przykład 17.1 zaciski do 17.0 , i 16.5 zaciski do 16.8 |
Tak |
Nieprawidłowy format (na przykład , 16x8 , 17_0 garbage ) |
Włącz wszystkie fale zmian, co oznacza, że wszystkie funkcje za każdą falą zmian są włączone. | Tak |
Zmienianie fal i skojarzonych funkcji
17.10
- Konfiguracja AppDomain jest serializowana bez używania narzędzia BinFmt — funkcja może zostać odrzucona tylko wtedy, gdy funkcja BinaryFormatter jest dozwolona w czasie wykonywania, edytując
MSBuild.runtimeconfig.json
- Przetwarzanie danych w całym procesie przetwarzania danych zestawu SDK pamięci podręcznej
17.8
- [RAR] Nie rób we/wy w odwołaniach dostarczonych przez zestaw SDK
- Usuń plik docelowy przed skopiowaną kopią
- Przechodzenie z sha1 do SHA256 dla zadania wyznaczania skrótu
- Wycofanie niestandardowych pochodnych elementów BuildEventArgs — funkcja może zostać odrzucona tylko wtedy, gdy funkcja BinaryFormatter jest dozwolona w czasie wykonywania, edytując
MSBuild.runtimeconfig.json
17,6
- Analizowanie nieprawidłowej właściwości w obszarze docelowym
- Eliminowanie pamięci podręcznej ciągów projektu
- Rejestrowanie błędu, gdy nie ma podanej ścieżki wyszukiwania dla importu
- Ładowanie zestawu dziennika
- Wartość AnyHaveMetadataValue zwraca wartość false po przekazaniu pustej listy
- Samodzielne rozszerzanie elementu dziennika
17.4
- Uwzględnianie pliku deps.json podczas ładowania zestawów
- Rozważ
Platform
jako wartość domyślną podczas negocjacji platformy - Dodawanie akceptowanego wzorca dopasowania nazwy zestawu SDK do manifestów zestawu SDK
- Ostrzeżenie o błędach wskazujących nieprawidłowe typy projektów
- Serwer MSBuild
- Wywoływanie nowego interfejsu API CultureInfo podczas walidacji kultur (tylko platforma.NET Core)
17,0
- Harmonogram powinien honorować buildParameters.DisableInprocNode
- Nie kompiluj wyrażeń regularnych globbing w programie .NET Framework
- Domyślnie do przechodniego kopiowania elementów zawartości
- Zestawy odwołań nie są już domyślnie umieszczane w
bin
katalogu (przywrócone tutaj i przywrócone tutaj) - Ulepszanie środowiska debugowania: dodawanie przełącznika globalnego MSBuildDebugEngine; Wstrzykiwanie rejestratora binarnego z narzędzia BuildManager; drukuj graf statyczny jako plik .dot
- Naprawianie zakleszczenia w programie BuildManager a LoggingService
- Optymalizowanie poziomu diag dla rejestratora plików i rejestratora konsoli
- Zoptymalizowane pliki niezmienne do aktualnych testów
- Dodawanie elementu Microsoft.IO.Redist dla wyliczenia katalogu
- Buforowanie całego procesu polecenia ToolsetConfigurationSection
- Normalizacja ścieżek wyjściowych RAR
Zmiana fal nie jest już w rotacji
16.8
- Włącz nowarn
- Obcięcie elementu docelowego/zadania pominięto komunikaty dziennika do 1024 znaków
- Nie rozwijaj pełnych globów dysku z fałszywym warunkiem
16,10
- Błąd, gdy rozszerzenie właściwości w warunku ma biały znak
- Zezwalaj na niestandardową lokalizację CopyToOutputDirectory za pomocą elementu TargetPath
- Zezwalaj użytkownikom z określonymi znakami specjalnymi w nazwie użytkownika na pomyślne skompilowanie podczas korzystania z pliku exec
- Operacje przywracania po awarii, gdy zestaw SDK jest niemożliwy do rozwiązania
- Optymalizowanie oceny globu
Często zadawane pytania
Dlaczego należy kierować każdą inną wersję do obracania fal zmian?
Uważamy, że jest to wystarczająco dużo czasu, aby prowadzić dyskusje z tymi, których dotyczy problem, i pomóc w dostosowaniu się do zmian.
Dlaczego zmienna środowiskowa, a nie właściwość projektu?
Istnieją scenariusze, w których chcemy umieścić funkcję na fali zmian, zanim program MSBuild załadował projekt. Z tego powodu fale zmian wymagają użycia zmiennych środowiskowych.
Dlaczego rezygnacja z zgody na rezygnację?
Rezygnacja jest dla nas lepszym rozwiązaniem. W przeciwnym razie prawdopodobnie otrzymalibyśmy ograniczoną opinię, gdy funkcja wpłynie na kompilacje klientów.