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

  1. Buat dan buat pustaka kelas C# bernama "ValidateMe" yang berisi antarmuka sederhana berikut:

    namespace ValidateMe;
    
    public interface IAnimal
    {
        string Name { get; }
        //string Sound { get; }
    }
    
  2. Ganti nama rakitan output menjadi "ValidateMeV1.dll".

  3. Sound Tambahkan properti ke antarmuka dengan membatalkan komentar baris kode tersebut.

  4. ApiCompatValidateAssemblies Tambahkan properti dan ApiCompatContractAssembly 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>
    
  5. 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.