Xdev.UserData 1.0.0

dotnet add package Xdev.UserData --version 1.0.0
                    
NuGet\Install-Package Xdev.UserData -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Xdev.UserData" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Xdev.UserData" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Xdev.UserData" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Xdev.UserData --version 1.0.0
                    
#r "nuget: Xdev.UserData, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Xdev.UserData@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Xdev.UserData&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Xdev.UserData&version=1.0.0
                    
Install as a Cake Tool

Xdev.UserData

Библиотека для получения информации о пользователе через PHP API

Содержание


Описание

Xdev.UserData — это мощная и простая в использовании библиотека на C# для получения подробной информации о пользователе через PHP API. Она позволяет получать данные об IP-адресе, географическом местоположении, интернет-провайдере, устройстве, браузере и многом другом.

ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ

Для определения геолокации, провайдера и других данных используется стороннее API:
http://ip-api.com/json/

Это бесплатный сервис с ограничением 45 запросов в минуту.
Ваш IP-адрес передается на сторонний сервер для определения:

  • Страны (country)
  • Города (city)
  • Региона (region)
  • Часового пояса (timezone)
  • Провайдера (ISP)
  • Организации (org)
  • Номера AS (as)
  • Типа соединения (mobile/proxy/hosting)

Политика конфиденциальности: https://ip-api.com/docs/legal

Возможности

  • Получение IP-адреса пользователя
  • Геолокация: страна, город, регион, часовой пояс
  • Информация о провайдере: ISP, организация, номер AS
  • Данные об устройстве: тип (Desktop/Mobile), ОС, браузер, User-Agent
  • Информация о запросе: метод, протокол, временная метка
  • Языковые предпочтения пользователя
  • Проверка: мобильное соединение, прокси, хостинг
  • Синхронные и асинхронные методы
  • Встроенное кэширование данных (30 секунд)
  • Безопасное приведение типов
  • Поддержка всех основных платформ .NET

Поддерживаемые платформы

Платформа Версии
.NET Framework 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Core 3.1
.NET 5.0, 6.0, 7.0, 8.0, 9.0, 10.0
.NET Standard 2.0, 2.1

Установка

NuGet Репозиторий
dotnet add package Xdev.UserData Latest

Быстрый старт

using Xdev.UserData;

// Создаем экземпляр клиента
using (var userInfo = new UserInfo())
{
    // Получаем отдельные поля
    string ip = userInfo.GetIpAddress();
    string country = userInfo.GetCountry();
    string city = userInfo.GetCity();
    string browser = userInfo.GetBrowser();
    
    Console.WriteLine($"IP: {ip}");
    Console.WriteLine($"Страна: {country}");
    Console.WriteLine($"Город: {city}");
    Console.WriteLine($"Браузер: {browser}");
    
    // Получаем полную информацию
    Console.WriteLine(userInfo.GetAllInfo());
}

Примеры использования

Пример 1: Получение основной информации

using Xdev.UserData;

using (var userInfo = new UserInfo())
{
    string basicInfo = userInfo.GetBasicInfo();
    Console.WriteLine(basicInfo);
}
  • Вывод
IP: your IP
Страна: Russia
Город: Kirov

Пример 2: Асинхронное получение данных

using Xdev.UserData;

using (var userInfo = new UserInfo())
{
    // Асинхронное получение
    string country = await userInfo.GetCountryAsync();
    string city = await userInfo.GetCityAsync();
    bool isMobile = await userInfo.IsMobileConnectionAsync();
    
    Console.WriteLine($"Страна: {country}");
    Console.WriteLine($"Город: {city}");
    Console.WriteLine($"Мобильное: {isMobile}");
}

Пример 3: Работа с языками

using Xdev.UserData;

using (var userInfo = new UserInfo())
{
    var languages = userInfo.GetLanguages();
    
    Console.WriteLine("Языки пользователя:");
    foreach (var lang in languages)
    {
        string code = lang["code"]?.ToString();
        double quality = Convert.ToDouble(lang["quality"]);
        Console.WriteLine($"  {code} (приоритет: {quality})");
    }
    
    string primaryLang = userInfo.GetPrimaryLanguage();
    Console.WriteLine($"Основной язык: {primaryLang}");
}

Пример 4: Использование своего API

using Xdev.UserData;

// Свой сервер с PHP скриптом
using (var userInfo = new UserInfo("https://ваш-сайт.ru/api/user-data.php"))
{
    var data = userInfo.GetAllData();
}

О том как установить API на свой сервер будет рассказано в Установка API на ваш сервер

Пример 5: Сохранение в файл

using Xdev.UserData;

using (var userInfo = new UserInfo())
{
    // Сохраняем JSON в файл
    string json = userInfo.GetRawJson();
    System.IO.File.WriteAllText("user_data.json", json);
    
    // Асинхронное сохранение
    await userInfo.SaveToFileAsync("user_data_pretty.json", true);
}

Пример 6: Полная информация

using Xdev.UserData;

using (var userInfo = new UserInfo())
{
    Console.WriteLine(userInfo.GetAllInfo());
}
  • Вывод
=== ИНФОРМАЦИЯ О ПОЛЬЗОВАТЕЛЕ ===

МЕСТОПОЛОЖЕНИЕ:
  IP: your IP
  Страна: Russia
  Город: Kirov
  Регион: Kaluga Oblast
  Часовой пояс: Europe/Moscow

СОЕДИНЕНИЕ:
  Провайдер: название вашего провайдера
  Организация: организация вашего провайдера
  AS: (хех)
  Мобильное: Да
  Прокси: Нет
  Хостинг: Нет

УСТРОЙСТВО:
  Тип: Desktop
  ОС: Windows
  Браузер: Edge

ЯЗЫКИ:
  ru (quality: 1)
  en (quality: 0.9)

Версия PHP на сервере: 5.6.40

Выводимые данные уникальны каждому

API Методы

Основные данные

Метод/Асинхронный метод Описание Источник
GetIpAddress() / GetIpAddressAsync() Получить IP-адрес Локально
GetCountry() / GetCountryAsync() Получить название страны ip-api.com
GetCity()/ GetCityAsync() Получить название города ip-api.com
GetRegion() / GetRegionAsync() Получить название региона ip-api.com
GetTimezone() / GetTimezoneAsync() Получить часовой пояс ip-api.com

Данные о соединении

Метод/Асинхронный метод Описание Источник
GetIsp() / GetIspAsync() Получить название провайдера ip-api.com
GetOrganization() / GetOrganizationAsync() Получить название организации ip-api.com
GetAsNumber() / GetAsNumberAsync() Получить номер AS ip-api.com
IsMobileConnection() / IsMobileConnectionAsync() Проверить мобильное соединение ip-api.com
IsHosting() / IsHostingAsync() Проверить хостинг ip-api.com
IsProxy() / IsProxyAsync() Проверить прокси ip-api.com

Данные об устройстве

Метод/Асинхронный метод Описание Источник
GetDeviceType() / GetDeviceTypeAsync() Получить тип устройства Локально
GetOperatingSystem() / GetOperatingSystemAsync() Получить ОС Локально
GetBrowser() / GetBrowserAsync() Получить браузер Локально
GetUserAgent() / GetUserAgentAsync() Получить User-Agent Локально

Данные запроса

Метод/Асинхронный метод Описание
GetRequestMethod() Получить метод запроса
GetRequestProtocol() Получить протокол
GetTimestamp() Получить временную метку
GetDateTime() Получить дату и время

Языки

Метод/Асинхронный метод Описание
GetLanguages() / GetLanguagesAsync() Получить список языков
GetPrimaryLanguage() Получить основной язык

Прочие методы

Метод/Асинхронный метод Описание
GetReferer() Получить Referer
GetRequestUri() Получить URI запроса
GetPhpVersion() Получить версию PHP
GetAllData() / GetAllDataAsync() Получить все данные
GetRawJson() / GetRawJsonAsync() Получить сырой JSON
IsApiAvailable() Проверить доступность API
ClearCache() Очистить кэш
RefreshData() / RefreshDataAsync() Обновить данные

Комбинированные методы

Метод/Асинхронный метод Описание
GetBasicInfo() Основная информация
GetConnectionInfo() Информация о соединении
GetDeviceInfo() Информация об устройстве
GetAllInfo() Полная информация

Структура данных


{
  "success": true,
  "data": {
    "ip": "your ip",
    "location": {
      "country": "Russia",
      "city": "Kirov",
      "region": "Kaluga Oblast",
      "timezone": "Europe/Moscow"
    },
    "connection": {
      "isp": "your isp",
      "organization": "your organization",
      "as_number": "your as_number",
      "is_mobile": true,
      "is_proxy": false,
      "is_hosting": false
    },
    "device": {
      "type": "Desktop",
      "os": "Windows",
      "browser": "Edge",
      "user_agent": "Mozilla/5.0..."
    },
    "request": {
      "method": "GET",
      "protocol": "HTTP/1.0",
      "timestamp": "your timestamp",
      "datetime": "2026-03-11 15:32:12"
    },
    "client": {
      "languages": [
        {"code": "ru", "quality": 1},
        {"code": "en", "quality": 0.9}
      ],
      "referer": "",
      "request_uri": "/API/user_data.php"
    },
    "server": {
      "php_version": "5.6.40"
    }
  }
}

Выводимые данные уникальны каждому

Требования к серверу

По умолчанию используется публичное API:

http://k90052gj.beget.tech/API/user_data.php

Можно указать свой эндпоинт:

var userInfo = new UserInfo("https://ваш-сайт.ru/api/user-data.php");

Установка API на ваш сервер

Главное требованеие!!! Сервер должен поддерживать PHP версии 5.6!!!

  • Для начало мы создаём файл с расширением .php
  • Потом мы вставляем этот код:
<?php

/**
 * ===================================================
 * ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ / IMPORTANT NOTICE
 * ===================================================
 * 
 * 🇷🇺 ДЛЯ ОПРЕДЕЛЕНИЯ ГЕОЛОКАЦИИ ИСПОЛЬЗУЕТСЯ СТОРОННЕЕ API:
 *    http://ip-api.com/json/
 * 
 *    Это бесплатный сервис с ограничением 45 запросов в минуту.
 *    Ваш IP-адрес передается на сторонний сервер для определения:
 *    - Страны (country)
 *    - Города (city)
 *    - Региона (region)
 *    - Часового пояса (timezone)
 *    - Провайдера (ISP)
 *    - Организации (org)
 *    - Номера AS (as)
 *    - Типа соединения (mobile/proxy/hosting)
 * 
 *    Политика конфиденциальности: https://ip-api.com/docs/legal
 * 
 * 🇬🇧 FOR GEOLOCATION DETECTION USES THIRD-PARTY API:
 *    http://ip-api.com/json/
 * 
 *    This is a free service with a limit of 45 requests per minute.
 *    Your IP address is sent to a third-party server to determine:
 *    - Country
 *    - City
 *    - Region
 *    - Timezone
 *    - ISP
 *    - Organization
 *    - AS number
 *    - Connection type (mobile/proxy/hosting)
 * 
 *    Privacy policy: https://ip-api.com/docs/legal
 * ===================================================
 */

/**
* MIT License

* Copyright (c) 2026 Хачапури dev

* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* 
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/**
 * GitHub: https://github.com/xachapyri-dev/Xdev-UserData-csharp
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');
header('X-Content-Type-Options: nosniff');

// Добавляем предупреждение в JSON ответ
$warning = [
    'notice' => [
        'ru' => 'Для определения геолокации используется стороннее API ip-api.com. Ваш IP передается на сторонний сервер.',
        'en' => 'Third-party API ip-api.com is used for geolocation. Your IP is sent to a third-party server.',
        'limit' => '45 requests per minute',
        'privacy' => 'https://ip-api.com/docs/legal'
    ]
];

/**
 * Получить IP-адрес пользователя
 */
function getUserIP() {
    $server = $_SERVER;
    
    $headers = array(
        'HTTP_CLIENT_IP',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_FORWARDED_FOR',
        'HTTP_FORWARDED',
        'REMOTE_ADDR'
    );
    
    foreach ($headers as $header) {
        if (isset($server[$header])) {
            $ip = $server[$header];
            
            if (strpos($ip, ',') !== false) {
                $ips = explode(',', $ip);
                $ip = trim($ips[0]);
            }
            
            if (filter_var($ip, FILTER_VALIDATE_IP)) {
                return $ip;
            }
        }
    }
    
    return 'UNKNOWN';
}

/**
 * Получить геоданные по IP через ip-api.com
 */
function getLocationFromIP($ip) {
    // Исключаем локальные IP
    $localIPs = array('127.0.0.1', '::1', 'localhost');
    if (in_array($ip, $localIPs) || $ip == 'UNKNOWN') {
        return array(
            'country' => 'Localhost',
            'city' => 'Localhost',
            'region' => 'Localhost',
            'timezone' => 'UTC',
            'isp' => 'Localhost',
            'org' => 'Localhost',
            'as' => 'Localhost',
            'is_mobile' => false,
            'is_proxy' => false,
            'is_hosting' => false,
            'source' => 'local'
        );
    }
    
    // Используем API ip-api.com
    $url = "http://ip-api.com/json/{$ip}?fields=status,country,city,regionName,timezone,isp,org,as,mobile,proxy,hosting";
    
    $context = stream_context_create(array(
        'http' => array(
            'method' => 'GET',
            'timeout' => 3,
            'header' => "User-Agent: Xdev.UserData/1.0\r\n"
        )
    ));
    
    $response = @file_get_contents($url, false, $context);
    
    if ($response !== false) {
        $data = json_decode($response, true);
        
        if ($data && isset($data['status']) && $data['status'] == 'success') {
            return array(
                'country' => isset($data['country']) ? $data['country'] : 'Unknown',
                'city' => isset($data['city']) ? $data['city'] : 'Unknown',
                'region' => isset($data['regionName']) ? $data['regionName'] : 'Unknown',
                'timezone' => isset($data['timezone']) ? $data['timezone'] : 'Unknown',
                'isp' => isset($data['isp']) ? $data['isp'] : 'Unknown',
                'org' => isset($data['org']) ? $data['org'] : 'Unknown',
                'as' => isset($data['as']) ? $data['as'] : 'Unknown',
                'is_mobile' => isset($data['mobile']) ? (bool)$data['mobile'] : false,
                'is_proxy' => isset($data['proxy']) ? (bool)$data['proxy'] : false,
                'is_hosting' => isset($data['hosting']) ? (bool)$data['hosting'] : false,
                'source' => 'ip-api.com'
            );
        }
    }
    
    // Если API не отвечает, возвращаем неизвестные данные
    return array(
        'country' => 'Unknown',
        'city' => 'Unknown',
        'region' => 'Unknown',
        'timezone' => 'Unknown',
        'isp' => 'Unknown',
        'org' => 'Unknown',
        'as' => 'Unknown',
        'is_mobile' => false,
        'is_proxy' => false,
        'is_hosting' => false,
        'source' => 'failed'
    );
}

/**
 * Получить информацию об устройстве
 */
function getDeviceInfo($userAgent) {
    $browser = 'Unknown';
    $os = 'Unknown';
    $device = 'Desktop';
    
    if (strpos($userAgent, 'Firefox') !== false) $browser = 'Firefox';
    elseif (strpos($userAgent, 'Chrome') !== false) $browser = 'Chrome';
    elseif (strpos($userAgent, 'Safari') !== false) $browser = 'Safari';
    elseif (strpos($userAgent, 'Opera') !== false || strpos($userAgent, 'OPR') !== false) $browser = 'Opera';
    elseif (strpos($userAgent, 'Edg') !== false) $browser = 'Edge';
    elseif (strpos($userAgent, 'MSIE') !== false || strpos($userAgent, 'Trident') !== false) $browser = 'Internet Explorer';
    
    if (strpos($userAgent, 'Windows NT') !== false) $os = 'Windows';
    elseif (strpos($userAgent, 'Mac OS X') !== false) $os = 'macOS';
    elseif (strpos($userAgent, 'Linux') !== false) $os = 'Linux';
    elseif (strpos($userAgent, 'Android') !== false) $os = 'Android';
    elseif (strpos($userAgent, 'iPhone') !== false || strpos($userAgent, 'iPad') !== false) $os = 'iOS';
    
    if (strpos($userAgent, 'Mobile') !== false || strpos($userAgent, 'Android') !== false || 
        strpos($userAgent, 'iPhone') !== false) $device = 'Mobile';
    
    return array(
        'browser' => $browser,
        'os' => $os,
        'device' => $device,
        'user_agent' => $userAgent
    );
}

/**
 * Получить языковые предпочтения
 */
function getLanguages($acceptLang) {
    $languages = array();
    
    if (!empty($acceptLang)) {
        $langs = explode(',', $acceptLang);
        foreach ($langs as $lang) {
            $parts = explode(';q=', $lang);
            $code = trim($parts[0]);
            $quality = isset($parts[1]) ? (float)$parts[1] : 1.0;
            
            $languages[] = array(
                'code' => $code,
                'quality' => $quality
            );
        }
        
        usort($languages, function($a, $b) {
            if ($a['quality'] == $b['quality']) return 0;
            return ($a['quality'] < $b['quality']) ? 1 : -1;
        });
    }
    
    return $languages;
}

// Основной код
$userIP = getUserIP();
$userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$acceptLang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';

// Получаем геоданные через стороннее API
$location = getLocationFromIP($userIP);

// Получаем информацию об устройстве
$deviceInfo = getDeviceInfo($userAgent);

// Получаем языки
$languages = getLanguages($acceptLang);

// Собираем все данные
$userData = array(
    'success' => true,
    'notice' => $warning['notice'], // Добавляем предупреждение в ответ
    'data' => array(
        'ip' => $userIP,
        'data_source' => $location['source'], // Указываем источник данных
        'location' => array(
            'country' => $location['country'],
            'city' => $location['city'],
            'region' => $location['region'],
            'timezone' => $location['timezone'],
            'latitude' => null, // API не возвращает координаты в этом запросе
            'longitude' => null
        ),
        'connection' => array(
            'isp' => $location['isp'],
            'organization' => $location['org'],
            'as_number' => $location['as'],
            'is_mobile' => $location['is_mobile'],
            'is_proxy' => $location['is_proxy'],
            'is_hosting' => $location['is_hosting']
        ),
        'device' => array(
            'type' => $deviceInfo['device'],
            'os' => $deviceInfo['os'],
            'browser' => $deviceInfo['browser'],
            'user_agent' => $deviceInfo['user_agent']
        ),
        'request' => array(
            'method' => isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET',
            'protocol' => isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1',
            'timestamp' => time(),
            'datetime' => date('Y-m-d H:i:s')
        ),
        'client' => array(
            'languages' => $languages,
            'referer' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '',
            'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''
        ),
        'server' => array(
            'php_version' => PHP_VERSION
        )
    )
);

// Добавляем pretty print если запрошено
$options = JSON_UNESCAPED_UNICODE;
if (isset($_GET['pretty'])) {
    $options |= JSON_PRETTY_PRINT;
}

echo json_encode($userData, $options);
?>
  • Загружаем на любой хостинг (сервер должен поддерживать PHP версии 5.6)
  • Всё! Используйте в вашем коде "Требования к серверу"

Отказ от ответственности

1. Использование стороннего API
Данная библиотека и соответствующий PHP-скрипт используют стороннее API ip-api.com для определения геолокации, информации о провайдере и других данных. Это означает, что:

  • IP-адрес пользователя передается на сервер ip-api.com
  • Сервер ip-api.com может собирать, хранить и обрабатывать эти данные в соответствии со своей политикой конфиденциальности
  • Мы не контролируем и не несем ответственности за действия ip-api.com

2. Ограничения бесплатного тарифа
Бесплатная версия ip-api.com имеет ограничение 45 запросов в минуту. При превышении этого лимита:

  • API может временно блокировать запросы
  • Данные могут возвращаться с ошибкой или отсутствовать
  • Рекомендуется использовать платную версию для высоконагруженных проектов

3. Точность данных
Мы не гарантируем 100% точность предоставляемых данных, так как они получены от стороннего API. Геолокация по IP всегда является приблизительной и может содержать ошибки.

4. Конфиденциальность пользователей
Разработчики, использующие эту библиотеку, обязаны:

  • Уведомлять пользователей о сборе и передаче их IP-адресов
  • Получать согласие пользователей, если это требуется по законодательству их страны
  • Обеспечивать соблюдение требований GDPR, CCPA и других законов о конфиденциальности

5. Ответственность
Авторы библиотеки не несут ответственности за:

  • Недоступность или некорректную работу стороннего API
  • Нарушение законодательства о конфиденциальности разработчиками, использующими эту библиотеку
  • Ущерб, прямой или косвенный, связанный с использованием данной библиотеки
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 is compatible.  net462 is compatible.  net463 was computed.  net47 is compatible.  net471 is compatible.  net472 is compatible.  net48 is compatible.  net481 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 116 3/11/2026