Szerelvény ellenőrzése

A csomagérvényesítéshez hasonlóan a szerelvény-érvényesítési eszközkészlet lehetővé teszi, hogy kódtár-fejlesztőként ellenőrizze, hogy a szerelvények konzisztensek és jól formázottak-e. Ha az alkalmazás nem csomagolható, a csomagellenőrzés helyett szerelvény-érvényesítést használjon.

A szerelvény ellenőrzése a következő ellenőrzéseket biztosítja:

  • Ellenőrzi, hogy a verziókban nincsenek-e kompatibilitástörő változások.
  • Ellenőrzi, hogy a szerelvény ugyanazokat a nyilvános API-kat tartalmazza-e az összes különböző futtatókörnyezet-specifikus implementációhoz.
  • Elfogja az alkalmazható lyukakat.

Futtathat szerelvény-ellenőrzést MSBuild feladatként vagy a Microsoft.DotNet.ApiCompat.Tool globális eszköz használatával.

MSBuild tevékenység engedélyezése

A .NET-projektben engedélyezheti a szerelvény érvényesítését a ApiCompatValidateAssemblies tulajdonság true beállításával és a szerződés (alapterv) szerelvény elérési útjának megadásával. Csomaghivatkozást is hozzá kell adnia a Microsoft.DotNet.ApiCompat.Task szolgáltatáshoz. (A targets csomagban lévő fájlok nem részei a .NET SDK-nak.)

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

A szerelvény-ellenőrzés a külső buildben fut több célként szolgáló projektek esetében (a DispatchToInnerBuilds cél után) vagy egy egy célként szolgáló projekt belső buildjében (a PrepareForRun cél részeként). Ez is teljesen növekményes, ami azt jelenti, hogy az összehasonlítás csak akkor aktiválódik, ha a bemenetek vagy kimenetek megváltoztak.

Példa

  1. Hozzon létre és hozzon létre egy "ValidateMe" nevű C#-osztálytárat, amely a következő egyszerű felületet tartalmazza:

    namespace ValidateMe;
    
    public interface IAnimal
    {
        string Name { get; }
        //string Sound { get; }
    }
    
  2. Nevezze át a kimeneti szerelvényt a következőre: "ValidateMeV1.dll".

  3. Adja hozzá a Sound tulajdonságot az interfészhez a kódsor kibontásával.

  4. Adja hozzá a projektfájlhoz a ApiCompatValidateAssemblies "Microsoft.DotNet.ApiCompat.Task" csomaghivatkozást és ApiCompatContractAssembly tulajdonságokat. Emellett növelje a szerelvény verzióját a "2.0.0"-ra.

    <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. Az osztálytár újraépítése.

    A build a következő hibákkal meghiúsul:

    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'
    

Kompatibilitási figyelmeztetések letiltása

A kompatibilitási figyelmeztetések letiltásáról további információt a Letiltás című témakörben talál.