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

如何实现SourceGenerator项目对.NET 6类库项目的引用?

解决.NET Standard 2.0源生成器引用.NET 6类库的问题

方案1:让类库多目标编译(推荐)

修改Enigma.Game.csproj,添加.NET Standard 2.0作为额外目标框架,让类库同时兼容net6.0和netstandard2.0,这样源生成器就能正常引用它的兼容版本。

修改后的项目文件示例:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
    <!-- 保留原有其他配置 -->
  </PropertyGroup>
</Project>

如果类库中用到了net6.0专属API,需要用条件编译指令包裹,避免在netstandard2.0编译时出错,示例:

#if NET6_0
// 仅在net6.0下生效的代码
#endif

方案2:拆分类库为兼容层与核心层

把源生成器需要依赖的公共类型(类、接口、枚举等)单独拆分到一个仅基于.NET Standard 2.0的类库中:

  • 新建Enigma.Game.Contracts.csproj(目标框架设为netstandard2.0),存放所有跨项目共享的基础定义
  • 原Enigma.Game.csproj(net6.0)引用这个新兼容层类库,实现具体业务逻辑
  • 源生成器项目直接引用Enigma.Game.Contracts.csproj

这种方式适合类库包含大量net6.0专属代码、不想用条件编译的场景,能彻底隔离兼容性问题。

方案3:直接引用类库输出DLL(不推荐)

若无法修改原类库,可临时直接引用其编译后的net6.0 DLL,但需注意:

  • 必须确保DLL中的类型未使用net6.0独有的API,否则源生成器运行时可能出现兼容性错误
  • 需手动管理DLL路径,项目依赖关系不清晰,长期维护成本高

操作步骤:

  1. 编译Enigma.Game.csproj得到输出DLL
  2. 在源生成器项目中添加现有项,选择该DLL,将其"复制到输出目录"设置为"如果较新则复制"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:55:18