Bagikan melalui


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.

Jika Anda memiliki logika MSBuild yang bergantung pada item ini yang dibuat, atur properti ke EmitLegacyAssetsFileItemstrue 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>.resourcesManifestResourceName. 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 LogicalNamemetadata , 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.

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

<DotNetCliToolReference> Hapus pengaturan dari proyek Anda.

Kategori

MSBuild

API yang Terpengaruh

T/A