Udostępnij za pośrednictwem


Zmiany powodujące niezgodność programu MSBuild na platformie .NET Core 2.1 — 3.1

Na tej stronie udokumentowane są następujące zmiany powodujące niezgodność:

Zmiana powodująca niezgodność Wprowadzona wersja
Kompilacje w czasie projektowania zwracają tylko odwołania do pakietów najwyższego poziomu 3.1
Zmiana nazwy pliku manifestu zasobu 3.0
Narzędzia projektu są teraz dołączone do zestawu SDK 2.1

.NET Core 3.1

Kompilacje w czasie projektowania zwracają tylko odwołania do pakietów najwyższego poziomu

Począwszy od zestawu .NET Core SDK 3.1.400, są zwracane tylko odwołania do pakietów najwyższego poziomu przez element docelowy RunResolvePackageDependencies .

Wprowadzona wersja

Zestaw .NET Core SDK 3.1.400

Opis zmiany

W poprzednich wersjach zestawu .NET Core SDK RunResolvePackageDependencies obiekt docelowy utworzył następujące elementy MSBuild zawierające informacje z pliku zasobów NuGet:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Te dane są używane przez program Visual Studio do wypełniania węzła Zależności w Eksplorator rozwiązań. Jednak może to być duża ilość danych, a dane nie są potrzebne, chyba że węzeł Zależności zostanie rozszerzony.

Począwszy od zestawu .NET Core SDK w wersji 3.1.400, większość z tych elementów nie jest domyślnie generowana. Zwracane są tylko elementy typu Package . Jeśli program Visual Studio potrzebuje elementów do wypełnienia węzła Zależności, odczytuje informacje bezpośrednio z pliku zasobów.

Przyczyna wprowadzenia zmiany

Ta zmiana została wprowadzona w celu zwiększenia wydajności ładowania rozwiązań w programie Visual Studio. Wcześniej wszystkie odwołania do pakietu zostały załadowane, co wiązało się z ładowaniem wielu odwołań, których większość użytkowników nigdy nie wyświetla.

Jeśli masz logikę MSBuild, która zależy od tworzonych elementów, ustaw EmitLegacyAssetsFileItems właściwość na true wartość w pliku projektu. To ustawienie umożliwia poprzednie zachowanie, w którym są tworzone wszystkie elementy.

Kategoria

MSBuild

Dotyczy interfejsów API

Nie dotyczy


.NET Core 3.0

Zmiana nazwy pliku manifestu zasobu

Począwszy od platformy .NET Core 3.0, w domyślnym przypadku program MSBuild generuje inną nazwę pliku manifestu dla plików zasobów.

Wprowadzona wersja

3.0

Opis zmiany

Przed programem .NET Core 3.0, jeśli dla elementu w pliku projektu nie LogicalNameokreślono EmbeddedResource żadnych metadanych lub DependentUpon , ManifestResourceNameprogram MSBuild wygenerował nazwę pliku manifestu we wzorcu <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Jeśli RootNamespace plik projektu nie jest zdefiniowany, wartość domyślna to nazwa projektu. Na przykład wygenerowana nazwa manifestu dla pliku zasobu o nazwie Form1.resx w katalogu głównym projektu to MyProject.Form1.resources.

Począwszy od platformy .NET Core 3.0, jeśli plik zasobu jest kolokowany z plikiem źródłowym o tej samej nazwie (na przykład Form1.resx i Form1.cs), program MSBuild używa informacji o typie z pliku źródłowego w celu wygenerowania nazwy pliku manifestu we wzorcu <Namespace>.<ClassName>.resources. Przestrzeń nazw i nazwa klasy są wyodrębniane z pierwszego typu w kolokowanym pliku źródłowym. Na przykład wygenerowana nazwa manifestu dla pliku zasobu o nazwie Form1.resx , który jest współlokowany z plikiem źródłowym o nazwie Form1.cs to MyNamespace.Form1.resources. Należy pamiętać, że pierwsza część nazwy pliku różni się od wcześniejszych wersji platformy .NET Core (MyNamespace zamiast MyProject).

Uwaga

Jeśli masz LogicalNamemetadane , ManifestResourceNamelub DependentUpon określone w elemencie EmbeddedResource w pliku projektu, ta zmiana nie ma wpływu na ten plik zasobu.

Ta zmiana powodująca niezgodność została wprowadzona wraz z dodatkami EmbeddedResourceUseDependentUponConvention właściwości do projektów platformy .NET Core. Domyślnie pliki zasobów nie są jawnie wyświetlane w pliku projektu platformy .NET Core, dlatego nie DependentUpon mają żadnych metadanych, aby określić, jak nazwać wygenerowany plik resources . Gdy EmbeddedResourceUseDependentUponConvention jest ustawiona wartość true, która jest wartością domyślną, program MSBuild wyszukuje kolokowany plik źródłowy i wyodrębnia przestrzeń nazw i nazwę klasy z tego pliku. Jeśli ustawiono EmbeddedResourceUseDependentUponConvention falsewartość , program MSBuild generuje nazwę manifestu zgodnie z poprzednim zachowaniem, które łączy RootNamespace i względną ścieżkę pliku.

W większości przypadków nie jest wymagana żadna akcja ze strony dewelopera, a aplikacja powinna nadal działać. Jeśli jednak ta zmiana ulegnie awarii aplikacji, możesz wykonać następujące czynności:

  • Zmień kod, aby oczekiwał nowej nazwy manifestu.

  • Zrezygnuj z nowej konwencji nazewnictwa, ustawiając wartość EmbeddedResourceUseDependentUponConvention na false w pliku projektu.

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

Kategoria

MSBuild

Dotyczy interfejsów API

Nie dotyczy


.NET Core 2.1

Narzędzia projektu są teraz dołączone do zestawu SDK

Zestaw .NET Core 2.1 SDK zawiera teraz typowe narzędzia interfejsu wiersza polecenia i nie trzeba już odwoływać się do tych narzędzi z projektu.

Opis zmiany

W programie .NET Core 2.0 projekty odwołują się do zewnętrznych narzędzi platformy .NET z ustawieniem <DotNetCliToolReference> projektu. W programie .NET Core 2.1 niektóre z tych narzędzi są dołączone do zestawu .NET Core SDK, a ustawienie nie jest już potrzebne. Jeśli dołączysz odwołania do tych narzędzi w projekcie, wystąpi błąd podobny do następującego: narzędzie "Microsoft.EntityFrameworkCore.Tools.DotNet" jest teraz dołączone do zestawu .NET Core SDK.

Narzędzia są teraz dostępne w zestawie SDK platformy .NET Core 2.1:

<Wartość DotNetCliToolReference> Narzędzie
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Wprowadzona wersja

Zestaw .NET Core SDK 2.1.300

<DotNetCliToolReference> Usuń ustawienie z projektu.

Kategoria

MSBuild

Dotyczy interfejsów API

Nie dotyczy