Udostępnij za pośrednictwem


Niestandardowe zdarzenia kompilacji pochodnej programu MSBuild przestarzałe

Niestandardowe zdarzenia kompilacji pochodnej dla dowolnej podklasy BuildEventArgs według dowolnej rozszerzalności kompilacji (głównie zadań niestandardowych) zostały przestarzałe.

Poprzednie zachowanie

Wcześniej można było pochodzić z dowolnej podklasy BuildEventArgs i używać tych typów swobodnie w zadaniach niestandardowych i innych punktach rozszerzalności kompilacji.

Nowe zachowanie

Począwszy od platformy .NET 8, zostanie wyświetlony błąd kompilacji, jeśli kod używa dowolnego typu pochodzącego z BuildEventArgs programu i kompilujesz przy użyciu programu MSBuild w wersji .NET 8, czyli z wiersza polecenia:

Użycie niezabezpieczonego elementu BinaryFormatter podczas serializacji niestandardowego typu zdarzenia "MyCustomBuildEventArgs". Wkrótce zostanie to przestarzałe. Zamiast tego użyj polecenia Extended*EventArgs. Więcej informacji: https://aka.ms/msbuild/eventargs

W przypadku kompilacji z programu Visual Studio nie ma żadnych zmian w zachowaniu, chyba że zdecydujesz się na ustawienie MSBUILDCUSTOMBUILDEVENTWARNING zmiennej środowiskowej na 1 (dostępnej w programie Visual Studio w wersji 17.8 lub nowszej).

Wprowadzona wersja

.NET 8 RC 1

Typ zmiany

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

BinaryFormatter serializacja jest przestarzała na platformie .NET 8 i nowszych wersjach. Każde użycie zgłasza BinaryFormatter wyjątek w czasie wykonywania. Ponieważ niestandardowe zdarzenia kompilacji pochodnej programu MSBuild używają BinaryFormatterpolecenia , kompilacja ulegnie awarii, jeśli użyjesz tych zdarzeń w kompilacji. Nowy błąd kompilacji zapewnia bardziej wdzięczny błąd.

Użyj jednego z następujących nowo wprowadzonych zdarzeń wbudowanych na potrzeby rozszerzalności zamiast niestandardowego zdarzenia pochodnej kompilacji:

Alternatywnie można tymczasowo wyłączyć sprawdzanie, jawnie ustawiając zmienną środowiskową MSBUILDCUSTOMBUILDEVENTWARNING na inną wartość niż 1.

Dotyczy interfejsów API