DataTables.API 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package DataTables.API --version 1.0.0
                    
NuGet\Install-Package DataTables.API -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="DataTables.API" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DataTables.API" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="DataTables.API" />
                    
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 DataTables.API --version 1.0.0
                    
#r "nuget: DataTables.API, 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 DataTables.API@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=DataTables.API&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=DataTables.API&version=1.0.0
                    
Install as a Cake Tool

Table of Contents

GitHub Actions Releases

🚀 DataTables - 现代化高性能数据表系统

异步优先数据表解决方案 - 适用于.NET Core服务端与Unity客户端

🚀 快速开始

.NET Core 项目

  1. 安装NuGet包
dotnet add package DataTables.API
  1. 零心智负担使用 🎉
using System;
using System.Threading.Tasks;
using DataTables;

public class Program
{
    public static async Task Main()
    {
        // 🌟 现代异步API - 自动初始化
        var scene = await DataTableManager.LoadAsync<DTScene>();
        var items = DataTableManager.GetCached<DTItem>(); // 缓存查询

        Console.WriteLine($"场景: {scene?.Name}, 物品数量: {items?.Count ?? 0}");

        // 🔥 可选的性能优化
        await DataTableManager.PreheatAsync(Priority.Critical | Priority.Normal);
        Console.WriteLine("数据预热完成!");
    }
}
  1. 智能配置 (可选)
// 🎯 一行代码完成所有配置
DataTableManager.UseFileSystem("./DataTables");
DataTableManager.EnableMemoryManagement(50); // 50MB智能缓存
DataTableManager.EnableProfiling(stats =>
    Console.WriteLine($"加载{stats.TableCount}个表,耗时{stats.LoadTime}ms"));

Unity项目

  1. 安装Unity Package

    • Releases下载DataTables.Unity.unitypackage
  2. 现代化Unity使用

运行时源码同步约定src/DataTables 是运行时源码的唯一修改源;src/DataTables.Unity/Assets/Scripts/DataTables 是构建 src/DataTables/DataTables.csproj 后自动同步出的 Unity 镜像目录。请不要直接修改 Unity 镜像中的 .cs 文件。提交前可运行 dotnet build -c Debug,再运行 ./scripts/verify-unity-runtime-sync.shgit diff --exit-code -- src/DataTables.Unity/Assets/Scripts/DataTables,确保 Unity 包与主运行时一致。

using System;
using DataTables;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    // Unity生命周期入口允许 async void;请在方法内捕获异常,避免异常丢失。
    async void Start()
    {
        try
        {
            // 🌟 异步优先 - 无阻塞启动
            var config = await DataTableManager.LoadAsync<DTGameConfig>();
            Debug.Log($"游戏版本: {config?.Version}");

            // 🔥 智能分层预热
            await DataTableManager.PreheatAsync(Priority.Critical);
            Debug.Log("关键数据预热完成,游戏可以启动!");

            // 后台预热其他数据
            _ = DataTableManager.PreheatAsync(Priority.Normal | Priority.Lazy);
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }
    }
}

🆕 新API指南

核心API对比

功能 🆕 新API (推荐) 🔄 兼容API
异步加载 await DataTableManager.LoadAsync<T>() DataTableManager.CreateDataTable<T>()
缓存查询 DataTableManager.GetCached<T>() DataTableManager.GetDataTable<T>()
状态检查 DataTableManager.IsLoaded<T>() 手动检查null
批量预热 await DataTableManager.PreheatAsync(Priority.All) DataTableManagerExtension.Preload()(生成的 TableRegistrations 提供表清单)
内存管理 DataTableManager.EnableMemoryManagement(50)
Hook注册 DataTableManager.OnLoaded<T>(callback) DataTableManager.HookDataTableLoaded<T>()

现代异步模式

// 🌟 推荐的现代异步模式

// 单表异步加载
var scene = await DataTableManager.LoadAsync<DTScene>();

// 并发加载多表
var tasks = new[]
{
    DataTableManager.LoadAsync<DTScene>(),
    DataTableManager.LoadAsync<DTItem>(),
    DataTableManager.LoadAsync<DTCharacter>()
};
var results = await Task.WhenAll(tasks);

// 缓存优先查询 (热路径)
var cachedScene = DataTableManager.GetCached<DTScene>();
if (cachedScene != null)
{
    var sceneData = DTScene.GetDataRowById(1001);
    Console.WriteLine($"场景名称: {sceneData?.Name}");
}

智能配置系统

// 🎯 统一配置接口

// 文件系统数据源 (默认)
DataTableManager.UseFileSystem("./DataTables");

// 网络数据源
DataTableManager.UseNetwork("https://cdn.game.com/data/");

// 自定义数据源
DataTableManager.UseCustomSource(new MyCustomDataSource());

// 内存管理 (LRU缓存)
DataTableManager.EnableMemoryManagement(100); // 100MB限制

// 性能监控
DataTableManager.EnableProfiling(stats =>
{
    Console.WriteLine($"加载了 {stats.TableCount} 个表");
    Console.WriteLine($"总耗时: {stats.LoadTime}ms");
    Console.WriteLine($"内存使用: {stats.MemoryUsed / 1024 / 1024:F1}MB");
});

可组合数据源配置示例

本地包 / StreamingAssets
// 兼容原有 API:本地 .bytes 文件仍可直接使用
DataTableManager.UseFileSystem("./DataTables");

// Unity 项目可预留 StreamingAssets 入口
DataTableManager.UseDataSource(
    new CachedDataSource(
        new StreamingAssetsDataSource(Application.streamingAssetsPath + "/DataTables")));
远程 CDN
// 兼容原有网络 API
DataTableManager.UseNetwork("https://cdn.game.com/data");

// 可按需叠加版本、压缩、加密与内存缓存装饰器
IDataSource cdnSource = new CachedDataSource(
    new CompressedDataSource(
        new VersionedDataSource(
            new NetworkDataSource("https://cdn.game.com/data"),
            "v42")));

DataTableManager.UseDataSource(cdnSource);
热更新 / 回退链路
// 优先读取热更新 CDN,失败或不存在时回退到随包数据
var hotUpdate = new VersionedDataSource(
    new NetworkDataSource("https://cdn.game.com/hotfix"),
    "2026.07.06");

var builtin = new StreamingAssetsDataSource(Application.streamingAssetsPath + "/DataTables");

DataTableManager.UseCompositeSource(hotUpdate, builtin);

// Addressables 可继承 AddressablesDataSourceBase 后接入项目内的 Addressables.LoadAssetAsync<TextAsset>()。

⚡ 性能优化

智能预热策略

// 🔥 现代预热API - 基于优先级的智能调度

// 客户端:分层预热
await DataTableManager.PreheatAsync(Priority.Critical);           // 立即加载关键数据
_ = DataTableManager.PreheatAsync(Priority.Normal | Priority.Lazy); // 后台预热其他数据

// 服务器:全量预热
var preheatStats = await DataTableManager.PreloadAllAsync();
Console.WriteLine($"预热完成: {preheatStats.SuccessCount} 成功, {preheatStats.FailureCount} 失败");

// 自定义预热 (并发安全)
var tasks = new[]
{
    DataTableManager.LoadAsync<DTConfig>(),
    DataTableManager.LoadAsync<DTLevel>(),
    DataTableManager.LoadAsync<DTCharacter>()
};
await Task.WhenAll(tasks);

PreheatAsync 会读取生成代码中的 DataTableManagerExtension.TableRegistrations,按 Priority 筛选后并发调用 LoadAsync<T>/CreateDataTableAsync<T>;返回的 LoadStats 包含本次预热的耗时、成功数、失败数与内存变化。GetStats() 返回进程内累计历史加载统计,而不是固定耗时。

性能监控与统计

// 📊 全面的性能监控

// 历史加载统计(LoadTime/MemoryUsed 为累计加载耗时与累计内存变化)
var stats = DataTableManager.GetStats();
Console.WriteLine($"已加载表数量: {stats.TableCount}");
Console.WriteLine($"累计加载耗时: {stats.LoadTime}ms");
Console.WriteLine($"成功/失败: {stats.SuccessCount}/{stats.FailureCount}");
Console.WriteLine($"累计内存变化: {stats.MemoryUsed / 1024 / 1024:F1}MB");

// 缓存统计
var cacheStats = DataTableManager.GetCacheStats();
if (cacheStats.HasValue)
{
    var cache = cacheStats.Value;
    Console.WriteLine($"缓存项数: {cache.TotalItems}");
    Console.WriteLine($"缓存命中率: {cache.HitRate:P}");
    Console.WriteLine($"内存使用率: {cache.MemoryUsageRate:P}");
}

// 加载状态检查
bool isLoaded = DataTableManager.IsLoaded<DTScene>();
Console.WriteLine($"场景表是否已加载: {isLoaded}");

Hook机制 2.0

// 🎣 简化的类型安全Hook系统

// 类型安全Hook
DataTableManager.OnLoaded<DTScene>(table =>
{
    Console.WriteLine($"✅ 场景表加载完成: {table.Count} 行数据");

    // 自定义后处理
    ValidateSceneData(table);
    BuildSceneIndex(table);
});

// 全局Hook
DataTableManager.OnAnyLoaded(table =>
{
    var typeName = table.GetType().Name;
    var loadTime = DateTime.Now;
    Console.WriteLine($"📊 [{loadTime:HH:mm:ss}] {typeName} 已加载");
});

// 清理Hook
DataTableManager.ClearHooks();

🎮 Unity集成

现代Unity最佳实践

using System;
using System.Threading.Tasks;
using DataTables;
using UnityEngine;

public class ModernDataTableDemo : MonoBehaviour
{
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    static void InitializeDataTables()
    {
        _ = InitializeDataTablesAsync();
    }

    static async Task InitializeDataTablesAsync()
    {
        try
        {
            // 🚀 启动时快速初始化
            DataTableManager.UseFileSystem(Application.streamingAssetsPath + "/DataTables");
            DataTableManager.EnableMemoryManagement(30); // Unity环境30MB限制

            // 立即加载核心表
            await DataTableManager.LoadAsync<DTGameConfig>();

            // 后台预热其他表
            _ = DataTableManager.PreheatAsync(Priority.Normal | Priority.Lazy);
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }
    }

    // Unity生命周期入口允许 async void;请在方法内捕获异常,避免异常丢失。
    async void Start()
    {
        try
        {
            // 🎯 场景相关数据预热
            await DataTableManager.PreheatAsync(Priority.Critical);
            Debug.Log("关键数据已就绪,游戏可以开始!");

            // 使用数据
            var config = DataTableManager.GetCached<DTGameConfig>();
            if (config != null)
            {
                var gameConfig = DTGameConfig.GetDataRowById(1);
                Debug.Log($"游戏版本: {gameConfig?.Version}");
            }
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }
    }

    void OnApplicationPause(bool pauseStatus)
    {
        if (pauseStatus)
        {
            // 暂停时清理缓存释放内存
            DataTableManager.ClearCache();
        }
    }
}

Unity性能优化技巧

using System.Threading.Tasks;

// 📱 移动平台优化

public class MobileOptimizationDemo : MonoBehaviour
{
    void Start()
    {
        // 根据设备性能调整缓存大小
        var systemMemory = SystemInfo.systemMemorySize;
        var cacheSize = systemMemory > 4096 ? 50 : 20; // 4GB+设备使用50MB,否则20MB
        DataTableManager.EnableMemoryManagement(cacheSize);

        // 监听内存警告
        Application.lowMemory += OnLowMemory;
    }

    private void OnLowMemory()
    {
        Debug.Log("收到内存警告,清理数据表缓存");
        DataTableManager.ClearCache();
    }

    // 场景切换时的优化策略:非Unity生命周期方法返回Task,便于调用方await并捕获异常。
    public async Task LoadSceneAsync(int sceneId)
    {
        var sceneConfig = DTScene.GetDataRowById(sceneId);

        // 预加载场景相关数据
        var preloadTasks = new[]
        {
            DataTableManager.LoadAsync<DTNpc>(),
            DataTableManager.LoadAsync<DTQuest>(),
            DataTableManager.LoadAsync<DTItem>()
        };

        await Task.WhenAll(preloadTasks);

        // 开始切换场景
        UnityEngine.SceneManagement.SceneManager.LoadScene(sceneConfig.SceneName);
    }
}

🎯 高级功能

自定义数据源

// 🔧 扩展自定义数据源

public class EncryptedDataSource : IDataSource
{
    private readonly string _baseDirectory;
    private readonly byte[] _encryptionKey;

    public EncryptedDataSource(string baseDirectory, byte[] encryptionKey)
    {
        _baseDirectory = baseDirectory;
        _encryptionKey = encryptionKey;
    }

    public async ValueTask<byte[]> LoadAsync(string tableName)
    {
        var filePath = Path.Combine(_baseDirectory, $"{tableName}.encrypted");
        var encryptedData = await File.ReadAllBytesAsync(filePath);

        // 自定义解密逻辑
        return DecryptData(encryptedData, _encryptionKey);
    }

    public ValueTask<bool> IsAvailableAsync()
    {
        return ValueTask.FromResult(Directory.Exists(_baseDirectory));
    }

    private byte[] DecryptData(byte[] encryptedData, byte[] key)
    {
        // 实现你的解密算法
        return encryptedData; // 这里应该是解密后的数据
    }
}

// 使用自定义数据源
var encryptionKey = LoadEncryptionKey();
var encryptedSource = new EncryptedDataSource("./EncryptedData", encryptionKey);
DataTableManager.UseCustomSource(encryptedSource);

工厂模式优化

// 🏭 工厂模式 - 消除反射调用,提升90%性能

// 实现数据表工厂
public class DTSceneFactory : IDataTableFactory<DTScene, DRScene>
{
    public DTScene CreateTable(string name, int capacity)
        => new DTScene(name, capacity);

    public DRScene CreateRow()
        => new DRScene();
}

// 注册工厂 (通常由代码生成器自动完成)
DataTableManager.RegisterFactory<DTScene, DRScene, DTSceneFactory>();

// 注册后,表的创建将使用工厂模式,避免反射调用
var scene = await DataTableManager.LoadAsync<DTScene>(); // 90%性能提升!

内存管理深度控制

// 🧠 精确的内存管理控制

// 启用LRU缓存管理
DataTableManager.EnableMemoryManagement(50); // 50MB限制

// 监控内存使用
var cacheStats = DataTableManager.GetCacheStats();
if (cacheStats?.MemoryUsageRate > 0.8f) // 使用率超过80%
{
    Console.WriteLine("内存使用率较高,LRU将自动淘汰旧数据");
}

// 手动清理缓存
DataTableManager.ClearCache();

// 禁用内存管理 (如果需要)
DataTableManager.DisableMemoryManagement();

📋 数据表格式

表格型(Table)格式

Excel文件格式定义:

行号 内容 说明
1 DTGen=Table, Title=场景表, Class=Scene, Index=Id, Group=Type 表头配置
2 场景ID, 场景名称@ABC, 场景类型, #备注 列描述
3 Id, Name, Type, Comment 字段名
4 int, string, Enum<SceneType>, string 字段类型
5+ 数据行... 实际数据

索引声明与查询 API

在 A1 表头中使用 Index= 声明唯一索引,使用 Group= 声明分组索引;组合索引用 & 固定字段顺序。生成器会在校验阶段检查字段是否存在、字段类型是否可作为字典 key、唯一索引是否重复,以及组合索引字段顺序是否稳定。

DTGen=Table, Title=场景表, Class=Scene, Index=Id, Index=Type&Level, Group=Type

生成代码会统一提供以下查询方法:

// 唯一索引:Index=Id
DRScene? row = DTScene.GetById(1001);
bool ok = DTScene.TryGetById(1001, out DRScene? found);
bool exists = DTScene.ContainsId(1001);

// 组合唯一索引:Index=Type&Level,调用参数顺序与声明顺序一致
DRScene? typed = DTScene.GetByTypeAndLevel(SceneType.Battle, 3);

// 分组索引:Group=Type
IReadOnlyList<DRScene>? scenes = DTScene.GetManyByType(SceneType.Battle);
bool hasGroup = DTScene.ContainsType(SceneType.Battle);

// 兼容旧 API:仍保留 GetDataRowByXxx/GetRowByXxx 与 GetDataRowsGroupByXxx/GetRowsGroupByXxx 别名。

索引字典在加载过程中使用可变字典构建,加载完成后通过只读字典接口暴露给查询 API,避免运行期查询路径产生额外锁或拷贝。

支持的数据类型

类型 说明 示例
基础类型 int, long, float, double, bool, string 42, 3.14, true
数组 Array<T> Array<int>[1,2,3]1#2#31|2|3
枚举 Enum<T> Enum<ColorType>Red
字典 Map<K,V> Map<int,string>{1:"a",2:"b"}
JSON JSON 复杂对象的JSON字符串
自定义 Custom 自定义类,需要字符串构造函数

🛠️ 代码生成器

CLI工具安装

# 全局安装
dotnet tool install --global DataTables.Generator

# 本地安装
dotnet tool install --tool-path ./tools DataTables.Generator

现代化生成命令

# 基础生成 - 自动优化
dotnet dtgen -i ./Tables -co ./Generated -do ./Data -n MyProject -p DT

# 高级生成 - 包含工厂模式优化
dotnet dtgen \
  -i "./Tables" \              # 输入目录
  -co "./Generated" \          # 代码输出目录
  -do "./Data" \               # 数据输出目录
  -n "MyProject" \             # 命名空间
  -p "DT" \                    # 类名前缀
  -t "RELEASE" \               # 列标签过滤
  --factory \                  # 启用工厂模式生成
  --async-first \              # 异步优先API
  -f                           # 强制覆写

解析选项与诊断

# 启用严格名称校验与公式一致性校验,并生成诊断报告
dotnet dtgen \
  -i "./Tables" -co "./Generated" -do "./Data" -n "MyProject" -p "DT" \
  --strictNameValidation true \
  --validateFormulaConsistency true \
  --formulaPolicy ValidateOnly \
  --columnCommentMarkerText "#列注释标志" \
  --rowCommentMarkerText "#行注释标志" \
  --skipCellMarker "#" \
  --arrayNestedSeparators "" \
  -t "CLIENT && !SERVER" \
  --diagnosticsJsonOutput diagnostics.json

# 关闭公式评估,快速导出
dotnet dtgen -i ./Tables -co ./Generated -do ./Data --formulaPolicy Off

# 自定义嵌套数组的分隔字符(解决 "id#count|id#count" 与单条目 "801000#2" 行为不一致问题)
# 字符位置 = 数组嵌套深度(从 1 开始);为空时维持旧行为(优先 '|' 否则 '#')
dotnet dtgen -i ./Tables -co ./Generated -do ./Data \
  --arrayNestedSeparators "|#-"   # 第 1 层 '|',第 2 层 '#',第 3 层 '-'
标签过滤语法(TFE Lite)
  • 语法元素(大小写不敏感):
    • 标识符:[A-Za-z0-9_]+
    • 布尔运算:ANDORNOT(别名:&&||!
    • 括号:()
  • 优先级:NOT > AND > OR
  • 空表达式:视为 true(不过滤)
  • Excel 标签标注:在列标题末尾用 @ 标注标签,多个标签可用空格、逗号、分号、竖线、中文逗号等分隔。
    • 示例:Hp@CLIENTAtk@CLIENT,SERVERSpeed@client|pve
  • 过滤表达式示例:
    • CLIENT AND NOT SERVER
    • (CLIENT OR EDITOR) AND NOT LEGACY
    • PVE || PVP
    • !INTERNAL

诊断报告(JSON)字段:

  • InfoCount / WarningCount / ErrorCount
  • Items: [ { Severity, File, Sheet, Cell, Message } ]

MSBuild集成


<Target Name="DataTablesGen" BeforeTargets="BeforeBuild">
    <DataTablesGenerator
        UsingNamespace="$(ProjectName)"
        InputDirectory="$(ProjectDir)Tables"
        CodeOutputDirectory="$(ProjectDir)Generated"
        DataOutputDirectory="$(ProjectDir)DataTables"
        PrefixClassName="DT"
        EnableFactoryPattern="true"
        AsyncFirstAPI="true"
        FilterColumnTags="RELEASE"
        ForceOverwrite="false" />
</Target>

📈 迁移指南

从旧版本升级

如果你目前使用传统的DataTableManager API:

// ❌ 旧版本方式 (仍然支持)
DataTableManager.SetDataTableHelper(new DefaultDataTableHelper("./Data"));
DataTableManagerExtension.Preload(() => Console.WriteLine("加载完成"));
DataTableManager.CreateDataTable<DTScene>(() => {
    var scene = DataTableManager.GetDataTable<DTScene>();
    var data = scene.GetDataRowById(2000);
});

// ✅ 升级到现代异步方式
DataTableManager.UseFileSystem("./Data");  // 一次性配置
var scene = await DataTableManager.LoadAsync<DTScene>(); // 异步加载
var data = DTScene.GetDataRowById(2000); // 直接访问

渐进式升级策略

  1. 阶段1 - 兼容运行 (保持现有代码不变)
// 现有代码继续工作,无需修改
DataTableManager.SetDataTableHelper(helper);
var table = DataTableManager.GetDataTable<DTScene>();
  1. 阶段2 - 新功能使用新API
// 新功能采用现代API
await DataTableManager.LoadAsync<DTNewTable>();
DataTableManager.EnableMemoryManagement(50);
  1. 阶段3 - 逐步重构
// 逐步替换旧API调用
// DataTableManager.CreateDataTable<T>(callback)
// → await DataTableManager.LoadAsync<T>()

API映射表

旧API 新API 说明
DataTableManager.SetDataTableHelper() DataTableManager.UseFileSystem() 数据源配置
DataTableManager.CreateDataTable<T>() await DataTableManager.LoadAsync<T>() 异步加载
DataTableManager.GetDataTable<T>() DataTableManager.GetCached<T>() 缓存查询
DataTableManagerExtension.Preload() await DataTableManager.PreloadAllAsync() 批量预热
DataTableManager.HookDataTableLoaded<T>() DataTableManager.OnLoaded<T>() Hook注册

🏆 性能基准

基于激进优化的性能表现:

场景 优化前 优化后 提升幅度
并发加载 存在竞态条件 100%并发安全
热路径查询 ~4500 ticks ~1489 ticks 3x 提升
内存管理 手动管理 智能LRU缓存 30-50% 减少
异步操作 阻塞调用 ValueTask优化 避免死锁
工厂模式 反射创建 零反射调用 90% 提升潜力

📜 License

This library is under the MIT License.


🌟 支持项目

如果这个项目对你有帮助,请考虑:

  • ⭐ 给项目点星
  • 🐛 报告bug和建议
  • 💡 贡献代码和文档
  • 📢 向其他开发者推荐

感谢使用 DataTables!享受现代化高性能的开发体验! 🚀

Binary format upgrade and compatibility

Starting with binary format version 3, generated .bytes files use a structured header before the row payload:

  1. Signature (DTABLE)
  2. FormatVersion
  3. SchemaHash
  4. GeneratorVersion
  5. TableFullName
  6. RowCount
  7. Flags

The schema hash is calculated during generation from the effective exported schema: table type, table full name, and each non-ignored field's name, type, and order. Runtime loading validates the .bytes schema hash against the hash embedded in the generated table class, so a mismatch clearly indicates that the generated C# code and binary data were not produced from the same table schema.

Upgrade policy:

  • Format version 3 is a breaking binary format used by the next major release; older format versions are not read by this runtime.
  • Runtimes require the exact binary format version they were built for. When upgrading, regenerate both the C# table code and .bytes assets together and publish them with the matching major runtime.
  • Flags is reserved for payload features such as compression, encryption, or an embedded default-value table. Unknown non-zero flags are rejected by the runtime until explicit support is added.
Product Compatible and additional computed target framework versions.
.NET 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 was computed.  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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

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.6 43 7/12/2026
1.0.2 53 7/11/2026
1.0.1 43 7/9/2026
1.0.0 54 7/7/2026
0.14.2 145 5/18/2026
0.13.26 108 5/18/2026
0.13.24 105 5/17/2026
0.13.22 119 5/17/2026
0.13.19 386 9/9/2025
0.13.18 258 9/8/2025
0.13.16 257 9/8/2025
0.13.15 229 8/24/2025
0.13.14 255 8/21/2025
0.13.13 273 8/20/2025
0.13.12 255 8/20/2025
0.13.10 272 8/13/2025
0.13.9 272 8/13/2025
0.13.8 265 8/13/2025
0.13.2 277 8/9/2025
0.13.1 280 7/14/2025
Loading failed