Perubahan pemecahan MSBuild di .NET Core 2.1 - 3.1
Perubahan mencolok berikut ini didokumenkan di halaman ini:
Breaking change | Versi yang diperkenalkan |
---|---|
Build waktu desain hanya mengembalikan referensi paket tingkat atas | 3.1 |
Perubahan nama file manifes sumber daya | 3.0 |
Alat proyek sekarang disertakan dalam SDK | 2.1 |
.NET Core 3.1
Build waktu desain hanya mengembalikan referensi paket tingkat atas
Mulai dari .NET Core SDK 3.1.400, hanya referensi paket tingkat atas yang dikembalikan oleh RunResolvePackageDependencies
target.
Versi yang diperkenalkan
.NET Core SDK 3.1.400
Deskripsi perubahan
Dalam versi .NET Core SDK sebelumnya, RunResolvePackageDependencies
target membuat item MSBuild berikut yang berisi informasi dari file aset NuGet:
PackageDefinitions
PackageDependencies
TargetDefinitions
FileDefinitions
FileDependencies
Data ini digunakan oleh Visual Studio untuk mengisi simpul Dependensi di Penjelajah Solusi. Namun, itu bisa menjadi sejumlah besar data, dan data tidak diperlukan kecuali simpul Dependensi diperluas.
Mulai dari .NET Core SDK versi 3.1.400, sebagian besar item ini tidak dihasilkan secara default. Hanya item jenis Package
yang dikembalikan. Jika Visual Studio memerlukan item untuk mengisi simpul Dependensi, visual Studio akan membaca informasi langsung dari file aset.
Alasan untuk berubah
Perubahan ini diperkenalkan untuk meningkatkan performa beban solusi di dalam Visual Studio. Sebelumnya, semua referensi paket akan dimuat, yang melibatkan pemuatan banyak referensi yang tidak akan pernah dilihat sebagian besar pengguna.
Tindakan yang direkomendasikan
Jika Anda memiliki logika MSBuild yang bergantung pada item ini yang dibuat, atur properti ke EmitLegacyAssetsFileItems
true
dalam file proyek Anda. Pengaturan ini memungkinkan perilaku sebelumnya di mana semua item dibuat.
Kategori
MSBuild
API yang Terpengaruh
T/A
.NET Core 3.0
Perubahan nama file manifes sumber daya
Mulai dari .NET Core 3.0, dalam kasus default, MSBuild menghasilkan nama file manifes yang berbeda untuk file sumber daya.
Versi yang diperkenalkan
3.0
Deskripsi perubahan
Sebelum .NET Core 3.0, jika tidak ada LogicalName
, , atau DependentUpon
metadata yang ditentukan untuk EmbeddedResource
item dalam file proyek, MSBuild menghasilkan nama file manifes dalam pola <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
ManifestResourceName
. Jika RootNamespace
tidak didefinisikan dalam file proyek, itu default ke nama proyek. Misalnya, nama manifes yang dihasilkan untuk file sumber daya bernama Form1.resx di direktori proyek akar adalah MyProject.Form1.resources.
Mulai dari .NET Core 3.0, jika file sumber daya dikolokasikan dengan file sumber dengan nama yang sama (misalnya, Form1.resx dan Form1.cs), MSBuild menggunakan informasi jenis dari file sumber untuk menghasilkan nama file manifes dalam pola <Namespace>.<ClassName>.resources
. Namespace layanan dan nama kelas diekstrak dari jenis pertama dalam file sumber yang dikolokasi. Misalnya, nama manifes yang dihasilkan untuk file sumber daya bernama Form1.resx yang dikolokasi dengan file sumber bernama Form1.cs adalah MyNamespace.Form1.resources. Hal utama yang perlu diperhatikan adalah bahwa bagian pertama dari nama file berbeda dengan versi .NET Core sebelumnya (MyNamespace alih-alih MyProject).
Catatan
Jika Anda memiliki LogicalName
metadata , ManifestResourceName
, atau DependentUpon
yang ditentukan pada EmbeddedResource
item dalam file proyek, perubahan ini tidak memengaruhi file sumber daya tersebut.
Perubahan yang melanggar ini diperkenalkan dengan penambahan properti ke EmbeddedResourceUseDependentUponConvention
proyek .NET Core. Secara default, file sumber daya tidak secara eksplisit tercantum dalam file proyek .NET Core, sehingga file tersebut tidak DependentUpon
memiliki metadata untuk menentukan cara menamai file .resources yang dihasilkan. Ketika EmbeddedResourceUseDependentUponConvention
diatur ke true
, yang merupakan default, MSBuild mencari file sumber yang dikolokasi dan mengekstrak namespace layanan dan nama kelas dari file tersebut. Jika Anda mengatur EmbeddedResourceUseDependentUponConvention
ke false
, MSBuild menghasilkan nama manifes sesuai dengan perilaku sebelumnya, yang menggabungkan RootNamespace
dan jalur file relatif.
Tindakan yang direkomendasikan
Dalam kebanyakan kasus, tidak ada tindakan yang diperlukan di bagian pengembang, dan aplikasi Anda harus terus berfungsi. Namun, jika perubahan ini merusak aplikasi, Anda dapat:
Ubah kode Anda untuk mengharapkan nama manifes baru.
Pilih keluar dari konvensi penamaan baru dengan mengatur
EmbeddedResourceUseDependentUponConvention
kefalse
dalam file proyek Anda.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategori
MSBuild
API yang Terpengaruh
T/A
.NET Core 2.1
Alat proyek sekarang disertakan dalam SDK
.NET Core 2.1 SDK sekarang menyertakan alat CLI umum, dan Anda tidak perlu lagi mereferensikan alat ini dari proyek.
Deskripsi perubahan
Di .NET Core 2.0, proyek mereferensikan alat .NET eksternal dengan <DotNetCliToolReference>
pengaturan proyek. Di .NET Core 2.1, beberapa alat ini disertakan dengan .NET Core SDK, dan pengaturan tidak lagi diperlukan. Jika Anda menyertakan referensi ke alat ini dalam proyek, Anda akan menerima kesalahan yang mirip dengan yang berikut ini: Alat 'Microsoft.EntityFrameworkCore.Tools.DotNet' sekarang disertakan dalam .NET Core SDK.
Alat yang sekarang disertakan dalam .NET Core 2.1 SDK:
<Nilai DotNetCliToolReference> | Alat |
---|---|
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 |
Versi yang diperkenalkan
.NET Core SDK 2.1.300
Tindakan yang direkomendasikan
<DotNetCliToolReference>
Hapus pengaturan dari proyek Anda.
Kategori
MSBuild
API yang Terpengaruh
T/A