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.
Zalecana akcja
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 LogicalName
określono EmbeddedResource
żadnych metadanych lub DependentUpon
, ManifestResourceName
program 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 LogicalName
metadane , ManifestResourceName
lub 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
false
wartość , program MSBuild generuje nazwę manifestu zgodnie z poprzednim zachowaniem, które łączy RootNamespace
i względną ścieżkę pliku.
Zalecana akcja
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
nafalse
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
Zalecana akcja
<DotNetCliToolReference>
Usuń ustawienie z projektu.
Kategoria
MSBuild
Dotyczy interfejsów API
Nie dotyczy