Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Fala zmian to zestaw zmian w działaniu programu MSBuild, których można uniknąć, ustawiając odpowiednią 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 aktualizacji do nowszej wersji MSBuild, zmiany mogące powodować problemy z kompatybilnością są domyślnie włączone, ale jeśli funkcja wpłynie negatywnie na budowę, można łatwo wyłączyć tę grupę 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. Lista funkcji w każdej fali zmian zostanie wyświetlona w dalszej części tego artykułu. Wyłączenie fali zmian wyłącza również fale zmian w wyższych wersjach.
Zrezygnuj z funkcji fal zmianowych
Aby wyłączyć funkcje w fali zmian, ustaw zmienną środowiskową MSBuildDisableFeaturesFromVersion na falę zmian (lub wersję programu MSBuild), która zawiera funkcję, którą chcesz wyłączone. Jest to wersja programu MSBuild, dla którego zostały opracowane funkcje. Zobacz przypisanie fal zmian do następujących funkcji.
Trwale uruchomione procesy MSBuild zachowują wartość parametru MSBuildDisableFeaturesFromVersion, z którą zostały uruchomione. Po zmianie zmiennej środowiskowej zamknij trwałe procesy kompilacji przed uruchomieniem innej kompilacji. W przypadku kompilacji uruchamianych za pomocą interfejsu wiersza polecenia .NET użyj polecenia dotnet build-server shutdown. W przypadku kompilacji uruchamianych przy użyciu Visual Studio lub MSBuild.exe, zamknij Visual Studio i zakończ wszystkie pozostałe procesy MSBuild.exe. W przeciwnym razie procesy użyte ponownie mogą nadal korzystać z poprzedniej wartości, a projekty kompilowane równolegle mogą używać różnych wartości.
Wartości MSBuildDisableFeaturesFromVersion
Jeśli nie ustawisz MSBuildDisableFeaturesFromVersion na prawidłową falę, zostanie wyświetlone ostrzeżenie i/lub zostaniesz domyślnie przypisany do określonej fali. W poniższej tabeli przedstawiono możliwe ustawienia:
wartość MSBuildDisableFeaturesFromVersion |
Wynik | Otrzymujesz ostrzeżenie? |
|---|---|---|
| Nieustawiony | Włącz wszystkie fale zmian, co oznacza, że dzięki każdej fali wszystkie funkcje są włączone. | Nie |
Każda prawidłowa i bieżąca fala zmian (na przykład 16.8) |
Wyłącz wszystkie funkcje za falą zmian 16.8i nowszych. |
Nie |
Nieprawidłowa wartość (na przykład 16.9, gdy prawidłowe fale są 16.8 i 16.10) |
Ustawienie domyślne najbliższej prawidłowej wartości (rosnąco). Na przykład ustawienie 16.9 ustawi cię na domyślne 16.10. |
Nie |
Poza rotacją (na przykład 17.1, gdy najwyższa fala jest 17.0) |
Zaciśnięty do najbliższej prawidłowej wartości. Na przykład 17.1 przymocowuje się do 17.0, a 16.5 przymocowuje się do 16.8 |
Tak |
Nieprawidłowy format (na przykład 16x8, 17_0, garbage) |
Włącz wszystkie fale zmian, co oznacza, że dzięki każdej fali wszystkie funkcje są włączone. | Tak |
Zmiana fal i powiązanych cech
Bieżąca rotacja fal zmian
18.10
-
Rozpoznawaj względne ścieżki projektu w odniesieniu do logicznego bieżącego katalogu w systemie Unix z
PWD, aby kompilacje w katalogach osiąganych przez dowiązania symboliczne dawały stabilne pełne ścieżki projektu i powiązane ścieżki danych wyjściowych. -
Proces przywracania przekazuje
ExcludeRestorePackageImports=truejako właściwość globalną, dzięki czemu przywracanie NuGet nie powoduje już ponownej ewaluacji każdego projektu. -
-getProperty/-getItem(bez wartości docelowej) zatrzymaj ocenianie po przebiegu generującym żądane dane, zamiast przeprowadzać pełne ocenianie, unikając późniejszych przebiegów, takich jak rejestracja celu.
18.9
- GenerateResource: wpisane wpisy danych/metadanych ResX w plikach Mark-of-the-Web są teraz traktowane jako niezaufane i blokowane przy użyciu MSB3821; odblokuj plik (lub ustaw wartość MSBUILDDISABLEFEATURESFROMVERSION=18.9), aby przywrócić wcześniejsze zachowanie. Wpisy ResXFileRef są zawsze blokowane niezależnie od tej fali.
- Bufory nazwanych potoków TaskHost domyślnie mają rozmiar 1 MB (wcześniej 128 KB), co zmniejsza zjawisko blokowania wysyłania w przypadku dużych pakietów TaskHostConfiguration. Można dostosować za pomocą MSBUILDNODECONNECTIONBUFFERSIZE
18.8
- Zadanie RAR: dla wielu właściwości wejściowych ustalaj ścieżki względne względem katalogu projektu, a nie bieżącego katalogu procesu
- Konsola, konsola równoległa i rejestratory terminali drukują ścieżki plików dziennika zapisanych przez zarejestrowane rejestratory (na przykład rejestrator plików i rejestrator binarny) w ramach podsumowania końca kompilacji.
18.7
- Ponawianie zadań kopiowania po wystąpieniu błędu ERROR_ACCESS_DENIED na platformach innych niż Windows, aby obsłużyć przejściowe konflikty blokad (np. w systemach plików CoW w systemie macOS)
- Naprawiono projekty WebSite ASP.NET, aby rozwiązać zależności netstandard2.0 — przekazano parametr TargetFrameworkVersion do zadania RAR i skopiowano bibliotekę fasadową netstandard.dll dla projektów internetowych korzystających z platformy .NET Framework 4.7.1 i nowszych.
18.6
- Optymalizacja AbsolutePath.GetCanonicalForm — unikaj kosztownych wywołań Path.GetFullPath, gdy ścieżki nie wymagają kanonizacji
- TaskHostTask przekazuje właściwości globalne na poziomie żądania (np. MSBuildRestoreSessionId) do out-of-proc TaskHost w trybie -mt
- Naprawiono ShouldTreatWarningAsError w elemencie TaskHost OOP, który sprawdzał niewłaściwą kolekcję (WarningsAsMessages zamiast WarningsAsErrors)
- Naprawiono zawieszanie się narzędzia ToolTask, gdy narzędzie uruchamia procesy potomne drugiego poziomu dziedziczące uchwyty potoków stdout/stderr
18,5
- Zadania FindUnderPath i AssignTargetPath nie zgłaszają już wyjątków z powodu nieprawidłowych znaków w ścieżce podczas korzystania z metody TaskEnvironment.GetAbsolutePath
- AssignTargetPath w systemie Linux uwzględnia rozróżnianie wielkości liter systemu plików zamiast zawsze ignorować wielkość liter
18.4
Fale zmian, które zostaną usunięte w wydaniu towarzyszącym platformie .NET 11
18.3
17.14
- ~ Obsługa plików .SLNX — używająca nowego parsera dla .sln i .slnx~ wycofana po wykryciu problemów ze zgodnością
-
Obsługa niestandardowych ustawień regionalnych w RAR— zobacz 11607, aby uzyskać szczegółowe informacje - Telemetria programu VS
17.12
- Log TaskParameterEvent dla parametrów skalarnych
- Metoda Convert.ToString podczas obliczania właściwości używa klasy InvariantCulture dla wszystkich typów
- Naprawianie nadmiernego udostępniania wyników kompilacji w usłudze ResultsCache
- Dodawanie parametru ParameterName i PropertyName do parametru TaskParameterEventArgs
- Emituj propsy eval, jeśli zażąda tego dowolny odbiornik
- Załaduj Microsoft. DotNet.MSBuildSdkResolver do domyślnego kontekstu ładowania (tylkoMSBuild.exe)
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. Należy pamiętać, że każde użycie elementu BinaryFormatter jest niezabezpieczone. - Ostrzeżenie dotyczące niestandardowych zdarzeń serializacji domyślnie w platformie .NET Framework
- Rozpoznawanie danych pamięci podręcznej SDK w całym procesie
- Parametry docelowe będą bez cudzysłów, co oznacza, że symbol ";" w nazwie docelowej parametru będzie zawsze traktowany jako separator
- Dodaj metadane linku do zasobów w elemencie docelowym AssignLinkMetadata
- Zmień dane wyjściowe opcji version tak, aby kończyły się znakiem nowego wiersza
- Załaduj NuGet.Frameworks do drugorzędnej domeny AppDomain (tylko MSBuild.exe)
- Aktualizowanie cech po zmianie środowiska
- Zadanie Exec nie przycina początkowych białych znaków w ConsoleOutput
- Wprowadzenie [MSBuild]::StableStringHash przeciążeń
- Zachowaj spójność kodowania standardowych danych wyjściowych i błędów ze stroną kodową konsoli narzędzia ToolTask
Zmiana fal nie jest już w rotacji
16.8
- Włącz NoWarn
- Obcięcie komunikatów dziennika związanych z celem/zadaniem do 1024 znaków
- Nie rozszerzaj pełnych globów dysku z fałszywym warunkiem
16.10
- Błąd, gdy rozszerzenie właściwości w warunku zawiera znak odstępu
- zezwalaj na niestandardową lokalizację CopyToOutputDirectory przy użyciu TargetPath
- Pozwól użytkownikom, którzy mają określone znaki specjalne w nazwie użytkownika, pomyślnie budować używając exec
- Niepowodzenie operacji przywracania, gdy zestaw SDK jest nierozwiązywalny
- Optymalizacja oceny glob
17.0
- Scheduler powinien uwzględniać parametr BuildParameters.DisableInprocNode
- Nie kompiluj wzorców globów z użyciem wyrażeń regularnych na .NET Framework
- Domyślnie stosuj transytowe kopiowanie elementów treści
- Zestawy odniesienia nie są już domyślnie umieszczane w katalogu
bin(odwrócone tutaj i przywrócone tutaj) - Ulepsz środowisko debugowania: dodaj globalny przełącznik MSBuildDebugEngine; Wstrzyknij rejestrator binarny z narzędzia BuildManager; drukuj graf statyczny jako plik .dot
- Naprawa zakleszczenia w BuildManager vs LoggingService
- Optymalizowanie poziomu diag dla rejestratora plików i rejestratora konsoli
- Zoptymalizowane sprawdzanie aktualności plików niezmiennych
- Dodaj Microsoft.IO.Redist do enumeracji katalogów
- Ogólnoprocesowe buforowanie ToolsetConfigurationSection
- Normalizacja ścieżek wyjściowych RAR
17.4
- Przestrzegaj deps.json podczas ładowania zestawów
-
rozważ
Platformjako domyślne ustawienie podczas negocjacji dotyczących platformy - Dodawanie akceptowanego wzorca dopasowania nazwy zestawu SDK do manifestów zestawu SDK
- Wygenerować ostrzeżenie wskazujące na nieprawidłowe typy projektów
- serwer MSBuild
17.6
- Analizowanie nieprawidłowej właściwości w kontekście celu
- Usunięcie pamięci podręcznej projektu
- Rejestrowanie błędu, gdy nie ma podanej ścieżki wyszukiwania dla importu
- Zestaw dziennika ładuje
- AnyHaveMetadataValue zwraca wartość false po przekazaniu pustej listy
- samodzielne rozszerzanie elementu dziennika
17.8
- [RAR] Nie wykonuj operacji wejścia/wyjścia na odniesieniach dostarczonych przez SDK
- Usuń plik docelowy przed skopiowanie
- Przejście od SHA1 do SHA256 dla zadania haszowania
-
Przestarzałe własne pochodne BuildEventArgs — z funkcji można zrezygnować tylko wtedy, gdy BinaryFormatter jest dozwolony w czasie wykonywania, edytując
MSBuild.runtimeconfig.json
Często zadawane pytania
Dlaczego celować w każdą alternatywną wersję dla wprowadzania zmian etapami?
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 zrezygnować z zgody?
Automatyczna rezygnacja jest dla nas lepszym rozwiązaniem. W przeciwnym razie prawdopodobnie otrzymalibyśmy ograniczoną opinię, gdy funkcjonalność wpłynie na wersje oprogramowania klientów.
Powiązana zawartość
- MSBuild
- Co nowego w programie MSBuild 16