demaconsulting/SpdxModel
GitHub: demaconsulting/SpdxModel
一个用于读写和操作 SPDX 软件物料清单(SBOM)文档的现代 C# 库,完整支持 SPDX 2.2 和 2.3 规范。
Stars: 0 | Forks: 0
# SPX 模型





[](https://sonarcloud.io/summary/new_code?id=demaconsulting_SpdxModel)
[](https://sonarcloud.io/summary/new_code?id=demaconsulting_SpdxModel)
[](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, 上游代理, 云安全监控, 代码库, 供应链透明度, 依赖管理, 开源合规, 文档安全, 硬件无关, 许可证管理, 跌倒检测, 软件开发工具包, 软件物料清单, 静态分析