.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.
Önerilen eylem
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 , ManifestResourceName
LogicalName
veya DependentUpon
meta veriler belirtilmemişse, MSBuild deseninde <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
bir 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>.resources
bildirim 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 , ManifestResourceName
veya DependentUpon
meta verileriniz LogicalName
varsa, 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 false
ayarlarsanızEmbeddedResourceUseDependentUponConvention
, MSBuild bildirim adını önceki davranışa göre oluşturur ve bu da ve göreli dosya yolunu birleştirirRootNamespace
.
Önerilen eylem
Ç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
EmbeddedResourceUseDependentUponConvention
false
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
Önerilen eylem
<DotNetCliToolReference>
Ayarı projenizden kaldırın.
Kategori
MSBuild
Etkilenen API’ler
Yok