You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Standard 2.0源生成器中获取.NET 8.0库的类型名?

在基于.NET Standard 2.0的源生成器中获取.NET 8.0库的类型细节

我开发了一个用于补全库实现的源生成器,分为源生成器程序集和库程序集两部分。为生成正确的实现代码,源生成器需要知晓库中部分类型的名称(若能获取泛型信息则更佳)。但该库基于.NET 8.0运行时构建,而源生成器必须基于.NET Standard 2.0,导致无法从源生成器正常引用该库。

是否有办法在源生成器中引入非.NET Standard 2.0兼容代码库的类型细节?


已尝试的方案

  • 引入零散C#文件:核心接口使用了非.NET Standard 2.0支持的特性,无法直接编译
    • 尝试通过#define NETSTANDARD2_0排除特性,虽可行但需大量定义,且部分特性是源生成器所需,不能随意排除
  • 共享项目:不支持静态抽象接口方法等高级特性,仅适用于简单库场景
  • 引用程序集:无法生成与运行时无关的输出程序集,即使仅用nameof()获取类型名,也要求库必须编译为.NET Standard 2.0

当前临时解决方案

我用单个文件存储大量const string实例来保存类型和命名空间名称,但当类型被移动或重命名时,源生成器要么无法找到关联成员,要么生成指向旧类型(或旧位置)的无效代码,维护成本极高。

内容的提问来源于stack exchange,提问作者user3797758

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:38:16