Megosztás a következőn keresztül:


MSBuild kompatibilitástörő változások a .NET Core 2.1- 3.1-ben

A következő kompatibilitástörő változások dokumentálva vannak ezen a lapon:

Kompatibilitástörő változás Bevezetett verzió
A tervezési idejű buildek csak legfelső szintű csomaghivatkozásokat adnak vissza 3.1
Erőforrás-jegyzékfájl nevének módosítása 3,0
Az SDK-ban már megtalálható projekteszközök 2.1

.NET Core 3.1

A tervezési idejű buildek csak legfelső szintű csomaghivatkozásokat adnak vissza

A .NET Core SDK 3.1.400-tól kezdve a cél csak legfelső szintű csomaghivatkozásokat ad RunResolvePackageDependencies vissza.

Bevezetett verzió

.NET Core SDK 3.1.400

Módosítás leírása

A .NET Core SDK korábbi verzióiban a cél a RunResolvePackageDependencies következő MSBuild elemeket hozta létre, amelyek információkat tartalmaztak a NuGet-objektumok fájljából:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Ezeket az adatokat a Visual Studio használja a Függőségek csomópont feltöltéséhez Megoldáskezelő. Ez azonban nagy mennyiségű adat lehet, és az adatokra nincs szükség, kivéve, ha a Függőségek csomópont ki van bontva.

A .NET Core SDK 3.1.400-es verziójától kezdve a legtöbb elem alapértelmezés szerint nem jön létre. A rendszer csak a típuselemeket Package adja vissza. Ha a Visual Studiónak szüksége van az elemekre a Függőségek csomópont feltöltéséhez, az adatokat közvetlenül az eszközfájlból olvassa be.

A változás oka

Ezt a módosítást a Visual Studióban a megoldásbetöltési teljesítmény javítása érdekében vezettük be. Korábban az összes csomaghivatkozás betöltődött, ami sok olyan hivatkozást tartalmazott, amelyeket a felhasználók többsége soha nem látna.

Ha olyan MSBuild logikával rendelkezik, amely ezektől az elemektől függ, állítsa be a tulajdonságot true a EmitLegacyAssetsFileItems projektfájlba. Ez a beállítás lehetővé teszi az összes elem létrehozásának korábbi viselkedését.

Kategória

Msbuild

Érintett API-k

n/a


.NET Core 3.0

Erőforrás-jegyzékfájl nevének módosítása

A .NET Core 3.0-tól kezdve az alapértelmezett esetben az MSBuild egy másik jegyzékfájlnevet hoz létre az erőforrásfájlokhoz.

Bevezetett verzió

3,0

Módosítás leírása

A .NET Core 3.0 előtt, ha nem LogicalName, ManifestResourceNamevagy DependentUpon metaadatokat adott meg a projektfájl egyik EmbeddedResource eleméhez, az MSBuild létrehozott egy jegyzékfájlnevet a mintában <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Ha RootNamespace nincs definiálva a projektfájlban, akkor alapértelmezés szerint a projekt neve lesz. Például egy Űrlap1.resx nevű erőforrásfájl létrehozott jegyzékneve a gyökérprojekt könyvtárában a MyProject.Form1.resources volt.

A .NET Core 3.0-tól kezdődően, ha egy erőforrásfájl azonos nevű forrásfájllal van együtt helyezve (például Form1.resx és Form1.cs), az MSBuild a forrásfájl típusadatait használja a jegyzékfájl nevének a mintában <Namespace>.<ClassName>.resourcesvaló létrehozásához. A rendszer kinyeri a névteret és az osztálynevet a megosztott forrásfájl első típusából. Például egy Form1.resx nevű erőforrásfájl létrehozott jegyzékneve, amely egy Form1.cs nevű forrásfájllal van együtt helyezve, a MyNamespace.Form1.resources. Fontos megjegyezni, hogy a fájlnév első része eltér a .NET Core korábbi verzióitól (MyProject helyett MyNamespace).

Feljegyzés

Ha a projektfájl egyik EmbeddedResource elemén meg van LogicalNameadva , ManifestResourceNamevagy DependentUpon metaadatok vannak megadva, akkor ez a módosítás nem érinti ezt az erőforrásfájlt.

Ez a kompatibilitástörő változás a tulajdonság .NET Core-projektekhez való EmbeddedResourceUseDependentUponConvention hozzáadásával lett bevezetve. Alapértelmezés szerint az erőforrásfájlok nincsenek explicit módon felsorolva egy .NET Core-projektfájlban, így nem DependentUpon rendelkeznek metaadatokkal a létrehozott .resources fájl elnevezéséhez. Ha EmbeddedResourceUseDependentUponConvention az alapértelmezett értékre truevan állítva, az MSBuild egy megosztott forrásfájlt keres, és kinyer egy névteret és egy osztálynevet a fájlból. Ha be falsevan állítvaEmbeddedResourceUseDependentUponConvention, az MSBuild az előző viselkedésnek megfelelően hozza létre a jegyzéknevet, amely egyesíti RootNamespace és a relatív fájl elérési útját.

A legtöbb esetben nincs szükség műveletre a fejlesztő részéről, és az alkalmazásnak továbbra is működnie kell. Ha azonban ez a módosítás megszakítja az alkalmazást, a következőkre van lehetőség:

  • Módosítsa a kódot az új jegyzéknévre való várakozáshoz.

  • A projektfájlban való beállítással EmbeddedResourceUseDependentUponConventionfalse tiltsa le az új elnevezési konvenciót.

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

Kategória

Msbuild

Érintett API-k

n/a


.NET Core 2.1

Az SDK-ban már megtalálható projekteszközök

A .NET Core 2.1 SDK már magában foglalja a parancssori felület általános eszközkészletét, és már nem kell a projektből hivatkoznia ezekre az eszközökre.

Módosítás leírása

A .NET Core 2.0-ban a projektek külső .NET-eszközökre hivatkoznak a <DotNetCliToolReference> projektbeállítással. A .NET Core 2.1-ben ezen eszközök némelyike megtalálható a .NET Core SDK-ban, és a beállításra már nincs szükség. Ha ezekre az eszközökre hivatkozik a projektben, a következőhöz hasonló hibaüzenet jelenik meg: A .NET Core SDK tartalmazza a "Microsoft.EntityFrameworkCore.Tools.DotNet" eszközt.

A .NET Core 2.1 SDK-ban mostantól elérhető eszközök:

<DotNetCliToolReference> érték Eszköz
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

Bevezetett verzió

.NET Core SDK 2.1.300

Távolítsa el a beállítást a <DotNetCliToolReference> projektből.

Kategória

Msbuild

Érintett API-k

n/a