- PVSM.RU - https://www.pvsm.ru -

.NET Portability Analyzer

.NET Portability Analyzer - 1


.NET Portability Analyzer это совсем не новое приложение, которое, по причине появления .NET Standard должно бы стать интересным для разработчиков. Портируемость кода ускоряет работу команд в разы. Если вам интересно узнать насколько переносим на другую платформу ваш код, то вы можете использовать .NET Portability Analyzer, который доступен в виде расширения для Visual Studio и в виде отдельного консольного приложения.

.NET Portability Analyzer актуален для разработчиков .NET, .NET Core, UWP, Xamarin и Mono.
Далее предлагаю вашему вниманию факты и описание процесса использования.

Приложение было создано интерном Microsoft по имени Charles Lowell [1] еще в 2014-ом году.
Сейчас это open source проект, к которому подключены многие разработчики. Ссылка на репозиторий проекта: dotnet-apiport [2]

Консольное приложение

Консольное приложение можно скачать по ссылке: releases [3]
Последний пре-релиз был 24 ноября 2015, но введя в консоли (cmd или PowerShell) команду

ApiPort.exe listTargets

Получим список вполне себе актуальных платформ. Консольное приложение фактически является оберткой, которая обращается к веб-сервису. Звездочка рядом с версией платформы указывает, что именно эта версия будет использована по умолчанию. Справка доступна при вызове приложения без параметров. Самая простая команда для анализа директории с проектом это:

ApiPort.exe analyze -f ProjectFolder

В этом случае директория ProjectFolder должна располагаться в той же папке, что и ApiPort.exe
Вместо директории можно указать файл.

.NET Portability Analyzer - 2

По умолчанию анализ происходит относительно следующих платформ: .NET Core App, .NET Framework, .NET Standard. Можно указать конкретную платформу (или платформы через запятую):

ApiPort.exe analyze -f ProjectFolder -t ".NET Core, Version 1.1"

Результат сохраняется в файл формата xlsx. Формат Excel является форматом по умолчанию. Еще доступна выгрузка в формате HTML и JSON. С помощью параметров -r HTML и –r JSON соответственно.

Альтернативно можно указать параметры, создав файл с наименованием unity.config и разместив его в той же папке, что и ApiPort. Содержимое файла задающего JSON в качестве формата отчета такое:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <typeAliases>
      <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
      <typeAlias alias="IApiPortService" type="Microsoft.Fx.Portability.IApiPortService, Microsoft.Fx.Portability" />
      <typeAlias alias="FileOutputApiPortService" type="ApiPort.FileOutputApiPortService, ApiPort" />
    </typeAliases>
    <container>
      <register type="IApiPortService" mapTo="FileOutputApiPortService"  >
        <lifetime type="singleton" />
      </register>
      <instance name="DefaultOutputFormat" value="json" />
    </container>
  </unity>
</configuration>

После создания файла unity.config и запуска утилиты получим отчет уже в формате JSON.

Если вы хотите запустить утилиту в режиме offline, то вам необходимо скачать или склонировать репозиторий dotnet-apiport [2]
После чего построить проект с помощью build.cmd, который находится в корневой директории проекта (построение в Visual Studio не создаст для вас утилиту с актуальными библиотеками для автономной работы). После построения (которое длится несколько минут) в директории binreleaseApiPort.Offline вы сможете найти файл ApiPort.exe – это будет версия для offline работы.

В качестве анализа отчета давайте лучше рассмотрим формат Excel, как самый наглядный. Первая страница файла показывает сводку по совместимости namespace-ов в процентах. При этом на версии разбиения нет.

.NET Portability Analyzer - 3

Перейдя на вторую закладку в Excel, получим более полезные подробности. Вот, скажем, список неподдерживаемого в .NET Core и даже список рекомендаций (в данном случае не особо полезных – удалите, вот и вся рекомендация).

.NET Portability Analyzer - 4

На третьей закладке расположены сборки, на которые есть ссылки, но которые расположены где-то в недоступном месте. Например, в GAC.

Расширение Visual Studio

Расширение для Visual Studio имеет название .NET Portability Analyzer [4]
Оно было обновлено последний раз относительно недавно 05.09.2016. Кроме того оно гораздо более юзабильное чем консольное приложение. Если у вас есть исходный код проекта, то вам определенно лучше использовать расширение для VS.

После установки расширения в Visual Studio необходимо произвести настройку интересующих вас платформ (targets). Сделать это можно, выбрав пункт .NET Portability Analyzer, в меню СервисПараметры.

.NET Portability Analyzer - 5

Есть 2 способа использовать это расширение:

1. Из меню Analyze выбрать пункт Analyze Assembly Portability… В этом случае вы сможете выбрать ранее скомпилированный файл.

2. Анализируется непосредственно проект. Правой кнопкой мыши вызывается контекстное меню на открытом в VS проекте, выбирается пункт Analyze и далее Analyze Assembly Portability… Но этот способ лучше первого тем, что в списке сообщений панели «Список ошибок» будут отображены все сообщения о несовместимости. И вы сможете, двойным кликом перейти к строке кода, в которой обнаружена несовместимость.

.NET Portability Analyzer - 6

На данном скриншоте отображены сообщения о том, что код await необходимо исправить. У Xamarin есть небольшое отличие о котором вы можете прочитать здесь: Async Support Overview [5]

Отчет будет выглядеть таким образом:

.NET Portability Analyzer - 7

Пара ссылок:
» На MSDN есть перевод статьи: Кросс-платформенная .NET Framework [6]
» Кроме этого есть старенький англоязычный мануал, который все еще актуален: Leveraging existing code across .NET platforms [7]

Автор: asommer

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/net/215332

Ссылки в тексте:

[1] Charles Lowell: https://channel9.msdn.com/Blogs/funkyonex/Fun-with-the-Interns-Charles-Lowell-on-the-NET-API-Portability-Analyzer

[2] dotnet-apiport: https://github.com/Microsoft/dotnet-apiport

[3] releases: https://github.com/Microsoft/dotnet-apiport/releases

[4] .NET Portability Analyzer: https://visualstudiogallery.msdn.microsoft.com/1177943e-cfb7-4822-a8a6-e56c7905292b

[5] Async Support Overview: https://developer.xamarin.com/guides/cross-platform/advanced/async_support_overview/

[6] Кросс-платформенная .NET Framework: https://msdn.microsoft.com/ru-ru/magazine/dn913184.aspx

[7] Leveraging existing code across .NET platforms: https://blogs.msdn.microsoft.com/dotnet/2014/08/06/leveraging-existing-code-across-net-platforms/

[8] Источник: https://habrahabr.ru/post/312506/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best