项目结构

July 25, 2026 · View on GitHub

本文说明 AspectCore 仓库的顶层目录布局与各目录的职责。包(package)级别的职责边界、公开入口与依赖方向不在此重复,详见 模块与包结构设计

1. 顶层目录一览

目录用途
src/15 个可发布的源码包(核心 + 扩展 + 编译时引擎)
tests/xUnit 测试项目:单元、双引擎一致性、E2E、反射、各容器集成;另含 NativeAOT 端到端验证项目
sample/可运行的示例项目
benchmark/早期的 BenchmarkDotNet 基准项目(Core、Reflection)
benchmarks/新的统一基准项目 AspectCore.Benchmarks
docs/本文档(中文为主,英文见 docs/en/
build/版本、签名与公共包属性(props)
.github/CI 工作流与覆盖率脚本

根目录还包含解决方案与工作区文件:AspectCore-Framework.slnNuGet.configLICENSEREADME.md。构建通过 dotnet CLI 驱动(见 本地构建),没有 Cake/PowerShell 构建脚本。

2. src/ — 源码包

src/ 下共 15 个包(不含 Directory.Build.props)。按角色可分为三类;各包的职责与依赖方向见 模块与包结构设计

  • 核心:AspectCore.AbstractionsAspectCore.CoreAspectCore.Extensions.Reflection
  • 编译时引擎:AspectCore.SourceGeneratornetstandard2.0,供 Roslyn 加载)
  • 扩展与集成:AspectCore.Extensions.DependencyInjectionAspectCore.Extensions.AutofacAspectCore.Extensions.WindsorAspectCore.Extensions.LightInjectAspectCore.Extensions.HostingAspectCore.Extensions.AspNetCoreAspectCore.Extensions.ConfigurationAspectCore.Extensions.DataValidationAspectCore.Extensions.DataAnnotationsAspectCore.Extensions.AspectScopeAspectCore.Extensions.CastleCompat(Castle DynamicProxy 兼容层,用于向 AspectCore 渐进迁移)

src/Directory.Build.props 对所有源码项目启用 .NET 分析器(提示性,不阻断构建)。

3. tests/ — 测试项目

tests/ 下每个项目对应一类测试目标;测试分类与覆盖率门槛见 测试策略

测试项目覆盖对象
AspectCore.Core.Tests核心单元测试。含 EngineParity/ 子目录,验证 DynamicProxy 与 Source Generator 两套引擎行为一致(如 RefReturnParityTestsInitRequiredMembersParityTests、record 类型等);另有 DynamicProxy/DependencyInjection/Injector/Configuration/Integrate/Issues/Extensions/Utils/ 等子目录
AspectCore.E2E.Tests端到端场景测试,用例集中在 Scenarios/,公共支撑在 Fixtures/TestHost.csTestServices.cs
AspectCore.Extensions.Reflection.Test反射扩展测试
AspectCore.Extensions.Autofac.TestAspectCore.Extensions.Windsor.TestAspectCore.Extensions.LightInject.TestAspectCore.Extensions.Hosting.TestsAspectCore.Extensions.DependencyInjection.TestAspectCore.Extensions.Configuration.Tests各容器 / 宿主 / 配置的集成测试
AspectCore.Extensions.CastleCompat.TestsCastle DynamicProxy 兼容层的迁移兼容测试(xUnit)
AspectCore.NativeAot.E2ENativeAOT 端到端验证项目(可执行程序 OutputType=ExePublishAot=true,非 xUnit 单测),验证 Source Generator 路径在原生二进制下的拦截行为

tests/Directory.Build.props 为所有测试项目统一引入 coverlet.msbuild 覆盖率采集。

4. sample/ — 示例

可运行的演示项目,用于展示典型用法:

  • AspectCore.Extensions.DependencyInjection.ConsoleSample
  • AspectCore.Extensions.Autofac.Sample
  • AspectCore.Extensions.DataAnnotations.Sample
  • AspectCore.Extensions.AspectScope.Sample

5. benchmark/benchmarks/

仓库存在两个基准目录:

  • benchmark/ — 早期基准:AspectCore.Core.BenchmarkAspectCore.Extensions.Reflection.Benchmark
  • benchmarks/ — 新的统一基准项目 AspectCore.Benchmarks

6. build/ — 构建配置

集中管理版本、签名与公共包属性:version.props(产品版本 3.0.0-rc.1)、common.props(包元数据 + LangVersion=13.0)、sign.props + aspectcore.snk(强名称签名)。构建由 dotnet CLI 直接驱动、复用这些 props,无 Cake 脚本。详见 本地构建

7. .github/ — CI

  • workflows/build-ci.ymlmaster 推送时的构建、打包与 MyGet 发布
  • workflows/build-pr-ci.yml — PR 校验:lint、build-and-test(ubuntu/windows)、单元与 E2E 的执行与覆盖率门槛、CodeQL
  • workflows/release.yml — 发布流程
  • scripts/check-coverage.sh — 覆盖率采集与门槛断言脚本

CI 详情见 测试策略贡献指南

相关文档