Validasi rakitan
Mirip dengan validasi paket, alat validasi rakitan memungkinkan Anda, sebagai pengembang pustaka, untuk memvalidasi bahwa rakitan Anda konsisten dan terbentuk dengan baik. Gunakan validasi rakitan alih-alih validasi paket saat aplikasi Anda tidak dapat dikemas.
Validasi rakitan menyediakan pemeriksaan berikut:
- Memvalidasi bahwa tidak ada perubahan yang melanggar di seluruh versi.
- Memvalidasi bahwa rakitan memiliki sekumpulan API publik yang sama untuk semua implementasi khusus runtime yang berbeda.
- Menangkap lubang penerapan apa pun.
Anda dapat menjalankan validasi rakitan baik sebagai tugas MSBuild atau menggunakan alat global Microsoft.DotNet.ApiCompat.Tool.
Aktifkan tugas MSBuild
Anda mengaktifkan validasi rakitan di proyek .NET Anda dengan mengatur ApiCompatValidateAssemblies
properti ke true
dan menentukan jalur ke rakitan kontrak (garis besar). Anda juga harus menambahkan referensi paket ke Microsoft.DotNet.ApiCompat.Task. (File targets
dalam paket tersebut bukan bagian dari .NET SDK.)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<ApiCompatValidateAssemblies>true</ApiCompatValidateAssemblies>
<ApiCompatContractAssembly>[Path to contract assembly]</ApiCompatContractAssembly>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup Condition="'$(ApiCompatValidateAssemblies)' == 'true'">
<PackageReference Include="Microsoft.DotNet.ApiCompat.Task" Version="8.0.100" PrivateAssets="all" IsImplicitlyDefined="true" />
</ItemGroup>
</Project>
Validasi rakitan berjalan baik di build luar untuk proyek multi-penargetan (setelah DispatchToInnerBuilds
target) atau di build dalam untuk proyek penargetan tunggal (sebagai bagian PrepareForRun
dari target). Ini juga sepenuhnya bertambah bertahas, yang berarti perbandingan hanya dipicu jika input atau output telah berubah.
Contoh
Buat dan buat pustaka kelas C# bernama "ValidateMe" yang berisi antarmuka sederhana berikut:
namespace ValidateMe; public interface IAnimal { string Name { get; } //string Sound { get; } }
Ganti nama rakitan output menjadi "ValidateMeV1.dll".
Sound
Tambahkan properti ke antarmuka dengan membatalkan komentar baris kode tersebut.ApiCompatValidateAssemblies
Tambahkan properti danApiCompatContractAssembly
dan referensi paket "Microsoft.DotNet.ApiCompat.Task" ke file proyek Anda. Tambahkan juga versi rakitan Anda ke "2.0.0".<PropertyGroup> <OutputType>Library</OutputType> <TargetFrameworks>net8.0</TargetFrameworks> <ApiCompatValidateAssemblies>true</ApiCompatValidateAssemblies> <ApiCompatContractAssembly>$(OutDir)bin\Release\net8.0\ValidateMeV1.dll</ApiCompatContractAssembly> <IsPackable>false</IsPackable> <Version>2.0.0</Version> </PropertyGroup> <ItemGroup Condition="'$(ApiCompatValidateAssemblies)' == 'true'"> <PackageReference Include="Microsoft.DotNet.ApiCompat.Task" Version="8.0.100" PrivateAssets="all" IsImplicitlyDefined="true" /> </ItemGroup>
Membangun kembali pustaka kelas Anda.
Build gagal dengan kesalahan berikut:
C:\Users\me\.nuget\packages\microsoft.dotnet.apicompat.task\8.0.100\build\Microsoft.DotNet.ApiCompat.ValidateAssemblies.Common.targets(16,5): error : API compatibility errors between 'bin\Release\net8.0\ValidateMeV1.dll' (left) and 'C:\Users\me\source\repos\ValidateMe\bin\Release\net8.0\ValidateMe.dll' (right): 1>C:\Users\me\.nuget\packages\microsoft.dotnet.apicompat.task\8.0.100\build\Microsoft.DotNet.ApiCompat.ValidateAssemblies.Common.targets(16,5): error CP0006: Cannot add interface member 'string ValidateMe.IAnimal.Sound' to C:\Users\me\source\repos\ValidateMe\bin\Release\net8.0\ValidateMe.dll because it does not exist on bin\Release\net8.0\ValidateMeV1.dll 1>C:\Users\me\.nuget\packages\microsoft.dotnet.apicompat.task\8.0.100\build\Microsoft.DotNet.ApiCompat.ValidateAssemblies.Common.targets(16,5): error : API breaking changes found. If those are intentional, the APICompat suppression file can be updated by rebuilding with '/p:ApiCompatGenerateSuppressionFile=true'
Menyembunyikan peringatan kompatibilitas
Untuk informasi tentang menekan peringatan kompatibilitas, lihat Cara menekan.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk