Zásadní změny nástroje MSBuild v .NET Core 2.1 – 3.1
Na této stránce jsou popsané následující zásadní změny:
Změna způsobující chybu | Zavedená verze |
---|---|
Sestavení v době návrhu vrací pouze odkazy na balíčky nejvyšší úrovně. | 3.1 |
Změna názvu souboru manifestu prostředku | 3,0 |
Project tools now included in SDK | 2.1 |
.NET Core 3.1
Sestavení v době návrhu vrací pouze odkazy na balíčky nejvyšší úrovně.
Počínaje sadou .NET Core SDK 3.1.400 se cíl vrátí pouze odkazy RunResolvePackageDependencies
na balíčky nejvyšší úrovně.
Zavedená verze
.NET Core SDK 3.1.400
Změna popisu
V předchozích verzích sady .NET Core SDK RunResolvePackageDependencies
cíl vytvořil následující položky nástroje MSBuild, které obsahovaly informace ze souboru prostředků NuGet:
PackageDefinitions
PackageDependencies
TargetDefinitions
FileDefinitions
FileDependencies
Tato data používá Visual Studio k naplnění uzlu Závislosti v Průzkumník řešení. Může to ale být velké množství dat a data nejsou potřeba, pokud není rozbalený uzel Závislosti.
Počínaje sadou .NET Core SDK verze 3.1.400 se většina těchto položek ve výchozím nastavení nevygeneruje. Vrátí se pouze položky typu Package
. Pokud Visual Studio potřebuje položky k naplnění uzlu Závislosti, přečte informace přímo ze souboru prostředků.
Důvod změny
Tato změna byla zavedena za účelem zlepšení výkonu načítání řešení v sadě Visual Studio. Dříve byly načteny všechny odkazy na balíčky, které zahrnovaly načítání mnoha odkazů, které by většina uživatelů nikdy nezobrazovala.
Doporučená akce
Pokud máte logiku NÁSTROJE MSBuild, která závisí na vytváření těchto položek, nastavte EmitLegacyAssetsFileItems
vlastnost do true
souboru projektu. Toto nastavení umožňuje předchozí chování, ve kterém jsou vytvořeny všechny položky.
Kategorie
MSBuild
Ovlivněná rozhraní API
–
.NET Core 3.0
Změna názvu souboru manifestu prostředku
Počínaje .NET Core 3.0 ve výchozím případě nástroj MSBuild vygeneruje pro soubory prostředků jiný název souboru manifestu.
Zavedená verze
3,0
Změna popisu
Před .NET Core 3.0, pokud nebyla zadána žádná LogicalName
ManifestResourceName
, nebo DependentUpon
metadata pro EmbeddedResource
položku v souboru projektu, nástroj MSBuild vygeneroval název souboru manifestu ve vzoru <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
. Pokud RootNamespace
není v souboru projektu definováno, je výchozí název projektu. Například vygenerovaný název manifestu pro soubor prostředků s názvem Form1.resx v kořenovém adresáři projektu byl MyProject.Form1.resources.
Počínaje .NET Core 3.0, pokud je soubor prostředků společně přidělený se zdrojovým souborem se stejným názvem (například Form1.resx a Form1.cs), nástroj MSBuild používá informace o typu ze zdrojového souboru k vygenerování názvu souboru manifestu ve vzoru <Namespace>.<ClassName>.resources
. Obor názvů a název třídy se extrahují z prvního typu v spolulokovaném zdrojovém souboru. Například vygenerovaný název manifestu pro soubor prostředků s názvem Form1.resx , který je společně přidělený zdrojovým souborem s názvem Form1.cs je MyNamespace.Form1.resources. Klíčovou věcí, kterou je třeba poznamenat, je, že první část názvu souboru se liší od předchozích verzí .NET Core (MyNamespace místo MyProject).
Poznámka:
Pokud máte LogicalName
, ManifestResourceName
nebo DependentUpon
metadata zadaná pro EmbeddedResource
položku v souboru projektu, tato změna nemá vliv na tento soubor zdroje.
Tato změna způsobující chybu byla zavedena přidáním EmbeddedResourceUseDependentUponConvention
vlastnosti do projektů .NET Core. Ve výchozím nastavení nejsou soubory prostředků explicitně uvedeny v souboru projektu .NET Core, takže nemají žádná DependentUpon
metadata k určení, jak pojmenovat vygenerovaný soubor .resources . Pokud EmbeddedResourceUseDependentUponConvention
je nastavena na true
, což je výchozí, NÁSTROJ MSBuild vyhledá společnělokovaný zdrojový soubor a extrahuje obor názvů a název třídy z daného souboru. Pokud nastavíte EmbeddedResourceUseDependentUponConvention
hodnotu false
, nástroj MSBuild vygeneruje název manifestu podle předchozího chování, které kombinuje RootNamespace
a relativní cestu k souboru.
Doporučená akce
Ve většině případů se nevyžaduje žádná akce na straně vývojáře a vaše aplikace by měla dál fungovat. Pokud ale tato změna aplikaci přeruší, můžete:
Změňte kód tak, aby očekával nový název manifestu.
Odhlaste se z nové zásady vytváření názvů nastavením
EmbeddedResourceUseDependentUponConvention
vfalse
souboru projektu.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategorie
MSBuild
Ovlivněná rozhraní API
–
.NET Core 2.1
Project tools now included in SDK
Sada .NET Core 2.1 SDK teď obsahuje běžné nástroje rozhraní příkazového řádku a už na tyto nástroje z projektu nemusíte odkazovat.
Změna popisu
V .NET Core 2.0 projekty odkazují na externí nástroje .NET s <DotNetCliToolReference>
nastavením projektu. V .NET Core 2.1 jsou některé z těchto nástrojů součástí sady .NET Core SDK a nastavení už není potřeba. Pokud do projektu zahrnete odkazy na tyto nástroje, zobrazí se vám podobná chyba: Nástroj Microsoft.EntityFrameworkCore.Tools.DotNet je teď součástí sady .NET Core SDK.
Nástroje, které jsou teď součástí sady .NET Core 2.1 SDK:
<DotNetCliToolReference> – hodnota | Nástroj |
---|---|
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 |
Zavedená verze
.NET Core SDK 2.1.300
Doporučená akce
<DotNetCliToolReference>
Odeberte nastavení z projektu.
Kategorie
MSBuild
Ovlivněná rozhraní API
–