demaconsulting/SpdxModel

GitHub: demaconsulting/SpdxModel

一个用于读写和操作 SPDX 软件物料清单(SBOM)文档的现代 C# 库,完整支持 SPDX 2.2 和 2.3 规范。

Stars: 0 | Forks: 0

# SPX 模型 ![GitHub forks](https://img.shields.io/github/forks/demaconsulting/SpdxModel?style=plastic) ![GitHub Repo stars](https://img.shields.io/github/stars/demaconsulting/SpdxModel?style=plastic) ![GitHub contributors](https://img.shields.io/github/contributors/demaconsulting/SpdxModel?style=plastic) ![GitHub](https://img.shields.io/github/license/demaconsulting/SpdxModel?style=plastic) ![Build](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/bd92b4780a071040.svg) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=demaconsulting_SpdxModel&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=demaconsulting_SpdxModel) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=demaconsulting_SpdxModel&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=demaconsulting_SpdxModel) [![NuGet](https://img.shields.io/nuget/v/DemaConsulting.SpdxModel.svg)](https://www.nuget.org/packages/DemaConsulting.SpdxModel/) 一个用于处理 SPDX (Software Package Data Exchange) 文档的现代 C# 库。该库提供了一个全面的内存模型,用于读取、操作和编写 SPDX Software Bill of Materials (SBOM) 文件。 ## 功能特性 - 🚀 **完整支持 SPDX 2.2 和 2.3** - 完整实现 SPDX 规范 - 📦 **内存模型** - 高效的 SPDX 文档对象模型 - 🔄 **JSON 序列化** - 以 JSON 格式读取和写入 SPDX 文档 - 🎯 **类型安全** - 具有可空引用类型的强类型 C# API - 🔍 **转换支持** - 用于操作 SPDX 关系的内置实用程序 - ⚡ **多目标框架** - 支持 .NET 8、9 和 10 - 🖥️ **跨平台** - 在 Windows、Linux 和 macOS 上构建并运行 - 🧪 **完善测试** - 拥有高代码覆盖率的全面测试套件 - 📚 **文档齐全** - 所有公共 API 的 XML 文档 - 🔒 **持续合规** - 每次运行 CI 时自动生成合规性证据,遵循 [Continuous Compliance](https://github.com/demaconsulting/ContinuousCompliance) 方法论 ## 安装 通过 NuGet 安装包: ``` dotnet add package DemaConsulting.SpdxModel ``` 或者通过 Package Manager Console 安装: ``` Install-Package DemaConsulting.SpdxModel ``` ## 快速开始 ### 读取 SPDX 文档 ``` using DemaConsulting.SpdxModel; using DemaConsulting.SpdxModel.IO; // Read SPDX document from JSON var json = File.ReadAllText("sbom.spdx.json"); var document = Spdx2JsonDeserializer.Deserialize(json); // Access document properties Console.WriteLine($"Document: {document.Name}"); Console.WriteLine($"Version: {document.Version}"); Console.WriteLine($"Packages: {document.Packages.Length}"); ``` ### 创建 SPDX 文档 ``` using DemaConsulting.SpdxModel; using DemaConsulting.SpdxModel.IO; // Create a new SPDX document var document = new SpdxDocument { Id = "SPDXRef-DOCUMENT", Name = "My Software", Version = "SPDX-2.3", DocumentNamespace = "https://example.com/my-software", CreationInformation = new SpdxCreationInformation { Created = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ"), Creators = ["Tool: MyTool-1.0"] }, Packages = [ new SpdxPackage { Id = "SPDXRef-Package", Name = "MyPackage", Version = "1.0.0", DownloadLocation = "https://example.com/package", FilesAnalyzed = false, LicenseConcluded = "MIT", LicenseDeclared = "MIT", CopyrightText = "Copyright (c) 2024 Example Corp" } ] }; // Serialize to JSON var json = Spdx2JsonSerializer.Serialize(document); File.WriteAllText("output.spdx.json", json); ``` ### 处理关系 ``` using DemaConsulting.SpdxModel; using DemaConsulting.SpdxModel.Transform; // Add relationships to a document var relationship = new SpdxRelationship { Id = "SPDXRef-DOCUMENT", RelationshipType = SpdxRelationshipType.Describes, RelatedSpdxElement = "SPDXRef-Package" }; SpdxRelationships.Add(document, relationship); // Get root packages from a document var rootPackages = document.GetRootPackages(); ``` ## API 概览 ### 核心类 - **`SpdxDocument`** - 表示 SPDX 文档 - **`SpdxPackage`** - 表示软件包 - **`SpdxFile`** - 表示文件 - **`SpdxSnippet`** - 表示代码片段 - **`SpdxRelationship`** - 表示元素之间的关系 - **`SpdxCreationInformation`** - 文档创建元数据 ### 序列化 - **`Spdx2JsonSerializer`** - 将 SPDX 文档序列化为 JSON - **`Spdx2JsonDeserializer`** - 从 JSON 反序列化 SPDX 文档 ### 转换 - **`SpdxRelationships`** - 用于管理关系的实用程序 ## 文档 - [API 文档](https://github.com/demaconsulting/SpdxModel/wiki) - 详细的 API 参考 - [贡献指南][contributing] - 如何为项目做出贡献 - [行为准则][code-of-conduct] - 社区准则 - [安全策略][security] - 安全漏洞报告 - [AGENTS.md][agents] - AI 编码代理说明 ## 环境要求 - .NET 8.0, 9.0, or 10.0 - C# 12 或更高版本 ## 开发 ### 从源代码构建 ``` # 克隆 repository git clone https://github.com/demaconsulting/SpdxModel.git cd SpdxModel # 还原 tools dotnet tool restore # 构建 dotnet build # 运行 tests dotnet test ``` ### 运行测试并生成覆盖率报告 ``` dotnet test --collect:"XPlat Code Coverage;Format=opencover" ``` ## 贡献 我们欢迎您的贡献!请参阅我们的 [贡献指南][contributing] 以了解: - 设置您的开发环境 - 编码标准和指南 - 提交 Pull Request - 报告错误和请求功能 ## 许可证 本项目采用 MIT 许可证授权 - 详情请参阅 [LICENSE][license] 文件。 ## 支持 - 📫 **问题反馈**: [GitHub Issues](https://github.com/demaconsulting/SpdxModel/issues) - 💬 **讨论交流**: [GitHub Discussions](https://github.com/demaconsulting/SpdxModel/discussions) ## 相关项目 - [SPDX Specification](https://spdx.dev/) - 官方 SPDX 规范 - [spdx-tool](https://github.com/demaconsulting/spdx-tool) - 用于处理 SPDX 文档的命令行工具 ## 致谢 本项目遵循由 Linux Foundation 维护的 [SPDX specification](https://spdx.dev/)。 由 [DEMA Consulting](https://github.com/demaconsulting) 用 ❤️ 制作
标签:DevSecOps, Homebrew安装, JSON序列化, NuGet包, SBOM, SPDX, 上游代理, 云安全监控, 代码库, 供应链透明度, 依赖管理, 开源合规, 文档安全, 硬件无关, 许可证管理, 跌倒检测, 软件开发工具包, 软件物料清单, 静态分析