Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Аналогично проверке пакетов, средство проверки сборки позволяет, как разработчик библиотеки, проверить, что сборки согласованы и хорошо сформированы. Используйте проверку сборки вместо проверки пакета, если приложение не упаковывается.
Проверка сборки предоставляет следующие проверка:
- Проверяет, что в разных версиях нет критических изменений.
- Проверяет, что сборка имеет один и тот же набор общедоступных API для всех различных реализаций, относящихся к среде выполнения.
- Перехватывает все дыры применимости.
Проверку сборки можно выполнить как задачу MSBuild, так и с помощью глобального средства Microsoft.DotNet.ApiCompat.Tool.
Включение задачи MSBuild
Чтобы включить проверку сборки в проекте .NET, задайте ApiCompatValidateAssemblies свойство true и укажите путь к сборке контракта (базовой). Кроме того, необходимо добавить ссылку на пакет в Microsoft.DotNet.ApiCompat.Task. (Файлы targets в этом пакете не являются частью пакета SDK для .NET.)
<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>
Проверка сборки выполняется либо во внешней сборке для проектов с несколькими целевыми объектами (после DispatchToInnerBuilds целевого объекта), либо во внутренней сборке для проекта с одним целевым объектом (в рамках целевого PrepareForRun объекта). Он также полностью добавочный, то есть сравнение активируется только в том случае, если входные или выходные данные изменились.
Пример
Создайте и создайте библиотеку классов C# с именем ValidateMe, которая содержит следующий простой интерфейс:
namespace ValidateMe; public interface IAnimal { string Name { get; } //string Sound { get; } }Переименуйте выходную сборку на "ValidateMeV1.dll".
Добавьте свойство в
Soundинтерфейс, раскомментируя такую строку кода.ApiCompatValidateAssembliesДобавьте в файл проекта ссылку наApiCompatContractAssemblyпакет Microsoft.DotNet.ApiCompat.Task и свойства. Также увеличьте версию сборки до версии 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>Перестройте библиотеку классов.
Сборка завершается сбоем со следующими ошибками:
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'
Подавление предупреждений о совместимости
Сведения о подавлении предупреждений совместимости см. в разделе "Как отключить".