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.

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á LogicalNameManifestResourceName, 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, ManifestResourceNamenebo 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.

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 v false 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

<DotNetCliToolReference> Odeberte nastavení z projektu.

Kategorie

MSBuild

Ovlivněná rozhraní API