.NET Core 2.1 - 3.1'de MSBuild hataya neden olan değişiklikler

Bu sayfada aşağıdaki hataya neden olan değişiklikler belgelenmiştir:

Hataya neden olan değişiklik Sürüm kullanıma sunulmuştur
Tasarım zamanı derlemeleri yalnızca en üst düzey paket başvurularını döndürür 3.1
Kaynak bildirim dosyası adı değişikliği 3.0
Proje araçları artık SDK'ya dahil edilmiştir 2.1

.NET Core 3.1

Tasarım zamanı derlemeleri yalnızca en üst düzey paket başvurularını döndürür

.NET Core SDK 3.1.400'den başlayarak, hedef tarafından RunResolvePackageDependencies yalnızca en üst düzey paket başvuruları döndürülür.

Sürüm kullanıma sunulmuştur

.NET Core SDK 3.1.400

Açıklama değiştirildi

.NET Core SDK'sının önceki sürümlerinde hedef, RunResolvePackageDependencies NuGet varlıkları dosyasından bilgi içeren aşağıdaki MSBuild öğelerini oluşturmuştur:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Bu veriler Visual Studio tarafından Çözüm Gezgini Bağımlılıklar düğümünü doldurmak için kullanılır. Ancak, bu büyük miktarda veri olabilir ve Bağımlılıklar düğümü genişletilmediği sürece verilere ihtiyaç duyulmaz.

.NET Core SDK sürüm 3.1.400'den başlayarak, bu öğelerin çoğu varsayılan olarak oluşturulmaz. Yalnızca türdeki Package öğeler döndürülür. Visual Studio Bağımlılıklar düğümünü doldurmak için öğelere ihtiyaç duyuyorsa, bilgileri doğrudan varlıklar dosyasından okur.

Değişiklik nedeni

Bu değişiklik, Visual Studio'nun içindeki çözüm yükü performansını geliştirmek için kullanıma sunulmuştur. Daha önce, çoğu kullanıcının asla görüntüleyemeyecekleri birçok başvuru yüklenmesini kapsayan tüm paket başvuruları yükleniyordu.

Oluşturulan bu öğelere bağlı MSBuild mantığınız varsa, proje dosyanızda özelliğini olarak true ayarlayınEmitLegacyAssetsFileItems. Bu ayar, tüm öğelerin oluşturulduğu önceki davranışı etkinleştirir.

Kategori

MSBuild

Etkilenen API’ler

Yok


.NET Core 3.0

Kaynak bildirim dosyası adı değişikliği

.NET Core 3.0'dan başlayarak, varsayılan durumda MSBuild kaynak dosyaları için farklı bir bildirim dosyası adı oluşturur.

Sürüm kullanıma sunulmuştur

3.0

Açıklama değiştirildi

.NET Core 3.0'dan önce, proje dosyasındaki bir EmbeddedResource öğe için , ManifestResourceNameLogicalNameveya DependentUpon meta veriler belirtilmemişse, MSBuild deseninde <RootNamespace>.<ResourceFilePathFromProjectRoot>.resourcesbir bildirim dosyası adı oluşturdu. Proje dosyasında tanımlanmamışsa RootNamespace , varsayılan olarak proje adı olur. Örneğin, kök proje dizininde Form1.resx adlı bir kaynak dosyası için oluşturulan bildirim adı MyProject.Form1.resources idi.

.NET Core 3.0'dan başlayarak, bir kaynak dosyası aynı ada sahip bir kaynak dosyayla (örneğin, Form1.resx ve Form1.cs) birlikte bulunursa, MSBuild, düzende <Namespace>.<ClassName>.resourcesbildirim dosyası adını oluşturmak için kaynak dosyadaki tür bilgilerini kullanır. Ad alanı ve sınıf adı, birlikte bulunan kaynak dosyasındaki ilk türden ayıklanır. Örneğin, Form1.cs adlı bir kaynak dosyayla birlikte bulunan Form1.resx adlı kaynak dosyası için oluşturulan bildirim adı MyNamespace.Form1.resources şeklindedir. Dikkate almak gereken önemli nokta, dosya adının ilk bölümünün .NET Core'un önceki sürümlerinden (MyProject yerine MyNamespace) farklı olmasıdır.

Not

Proje dosyasındaki bir EmbeddedResource öğede belirtilen , ManifestResourceNameveya DependentUpon meta verileriniz LogicalNamevarsa, bu değişiklik bu kaynak dosyasını etkilemez.

Bu hataya neden olan değişiklik, özelliğin .NET Core projelerine eklenmesiyle EmbeddedResourceUseDependentUponConvention ortaya çıkmıştır. Varsayılan olarak, kaynak dosyaları açıkça bir .NET Core proje dosyasında listelenmez, bu nedenle oluşturulan .resources dosyasının nasıl adlandırılacağını belirtmek için meta verileri yokturDependentUpon. EmbeddedResourceUseDependentUponConvention varsayılan olan olarak ayarlandığındatrue, MSBuild birlikte bulunan bir kaynak dosyayı arar ve bu dosyadan bir ad alanı ve sınıf adı ayıklar. olarak falseayarlarsanızEmbeddedResourceUseDependentUponConvention, MSBuild bildirim adını önceki davranışa göre oluşturur ve bu da ve göreli dosya yolunu birleştirirRootNamespace.

Çoğu durumda, geliştirici tarafından herhangi bir eylem gerekmez ve uygulamanız çalışmaya devam etmelidir. Ancak, bu değişiklik uygulamanızı bozarsa şunları yapabilirsiniz:

  • Kodunuzu yeni bildirim adını bekleyecek şekilde değiştirin.

  • Proje dosyanızda olarak ayarlayarak EmbeddedResourceUseDependentUponConventionfalse yeni adlandırma kuralını geri çevirme.

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

Kategori

MSBuild

Etkilenen API’ler

Yok


.NET Core 2.1

Proje araçları artık SDK'ya dahil edilmiştir

.NET Core 2.1 SDK'sı artık ortak CLI araçlarını içerir ve artık bu araçlara projeden başvurmanız gerekmez.

Açıklama değiştirildi

.NET Core 2.0'da projeler, proje ayarıyla dış .NET araçlarına <DotNetCliToolReference> başvurur. .NET Core 2.1'de, bu araçlardan bazıları .NET Core SDK'sı ile birlikte sunulur ve bu ayar artık gerekli değildir. Projenize bu araçlara başvurular eklerseniz, aşağıdakine benzer bir hata alırsınız: 'Microsoft.EntityFrameworkCore.Tools.DotNet' aracı artık .NET Core SDK'sına dahil edilmiştir.

Araçlar artık .NET Core 2.1 SDK'sında yer alıyor:

<DotNetCliToolReference> değeri Araç
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

Sürüm kullanıma sunulmuştur

.NET Core SDK 2.1.300

<DotNetCliToolReference> Ayarı projenizden kaldırın.

Kategori

MSBuild

Etkilenen API’ler

Yok