.NET Portability Analyzer


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

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

Додаток було створено інтерном Microsoft по імені Charles Lowell ще в 2014-му році.
Зараз це open source проект, до якого підключені багато розробники. Посилання на репозиторій проекту: dotnet-apiport

Консольний додаток

Консольний додаток можна завантажити за посиланням: releases
Останній пре-реліз був 24 листопада 2015, але ввівши в консолі (cmd або PowerShell) команду

ApiPort.exe listTargets
 

Отримаємо список цілком собі актуальних платформ. Консольний додаток фактично є обгорткою, яка звертається до веб-сервісу. Зірочка поруч з версією платформи вказує, що саме ця версія буде використана за замовчуванням.
Довідка доступна при виконанні програми без параметрів.
Найпростіша команда для аналізу директорії з проектом це:

ApiPort.exe analyze -f ProjectFolder
 

У цьому випадку директорія ProjectFolder повинна розташовуватися в тій же папці, що і ApiPort.exe
Замість директорії можна вказати файл.



За замовчуванням аналіз відбувається відносно наступних платформ: .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
Після чого побудувати проект build.cmd, який знаходиться в кореневій директорії проекту (побудова в Visual Studio не створить для вас утиліту з актуальними бібліотеками для автономної роботи)
Після побудови (яке триває кілька хвилин) в директорії bin\release\ApiPort.Offline ви зможете знайти файл ApiPort.exe – це буде версія для offline роботи.

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



Перейшовши на другу закладку в Excel, отримаємо більш корисні подробиці. Ось, скажімо, список підтримуваного в .NET Core і навіть список рекомендацій (в даному випадку не особливо корисних – видаліть, ось і вся рекомендація).



На третій закладці розташовані складання, на які є посилання, але які розташовані десь в недоступному місці. Наприклад, в GAC.

Розширення Visual Studio

Розширення для Visual Studio має назву .NET Portability Analyzer
Воно було оновлено останній раз відносно недавно 05.09.2016. Крім того воно набагато більш юзабильное ніж консольний додаток. Якщо у вас є вихідний код проекту, то вам, безумовно, краще використовувати для розширення VS.
Після встановлення розширення Visual Studio необхідно провести настройку вакансій, що вас платформ (targets). Зробити це можна, вибравши пункт .NET Portability Analyzer, в меню СервісПараметри.



Є 2 способи використовувати це розширення:

1. З меню Analyze виберіть Analyze Assembly Portability... В цьому випадку ви зможете вибрати раніше скомпільований файл.

2. Аналізується безпосередньо проект. Правою кнопкою миші викликається контекстне меню на відкритому VS проекті, вибирається пункт Analyze і далі Analyze Assembly Portability... Але цей спосіб краще першого тим, що в списку повідомлень панелі «Список помилок» будуть відображені всі повідомлення про несумісність. І ви зможете подвійним кліком перейти до рядка коду, в якій виявлена несумісність.



На цьому скріншоті відображені повідомлення про те, що код await необхідно виправити. У Xamarin є невелике відміну якому ви можете прочитати тут: Async Support Overview

Звіт буде виглядати таким чином:



Пара посилань:
На MSDN є переклад статті: Крос-платформна .NET Framework
Крім цього є старенький англомовний мануал, який все ще актуальний: Leveraging existing code across .NET platforms
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.