当前位置: 首页 > news >正文

【踩坑】Roslyn 5与VS2022——不散的红色浪线

本文地址:https://www.cnblogs.com/oberon-zjt0806/p/19429665

首先祝大家2026新年快乐!🎉🐴

先说本文的结论——

Visual Studio 2022的IntelliSense似乎不能和Roslyn 5.0良好配合,导致MSBuild无法加载到生成器构建的代码
如果想在Visual Studio 2022中使用代码分析服务,请确保引用的Nuget包Microsoft.CodeAnalysis的版本为4.x
MSDN文档列举了Roslyn版本与具体IDE的兼容情况,详见这里
另外,如果目标项目的CS0103或者CS0246没有立即褪去,那么你需要关闭报错的文件,清理并重新生成解决方案。

前请提要

昨天想接触一下传说中的源代码生成器(Source Generator),于是就查了一堆资料照猫画虎写了一个——

/// 生成器程序集 SourceGeneratorDemo.Generators
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
using System.Text;namespace SourceGeneratorDemo.Generators;[Generator]
public class HelloWorldGenerator : IIncrementalGenerator
{public void Initialize(IncrementalGeneratorInitializationContext context){// A simple pipeline that always produces a single stringvar helloSource = context.AnalyzerConfigOptionsProvider.Select((_, _) => @"
namespace SourceGeneratorDemo.Generated
{public class GeneratedProgram{public static void HelloWorld(){Console.WriteLine(""Hello from incremental generator!"");}}
}
");context.RegisterSourceOutput(helloSource, (spc, source) =>{spc.AddSource("GeneratedProgram.g.cs", SourceText.From(source, Encoding.UTF8));});}
}

显然这个生成器预期产生下面这段代码,一个简单的Hello World类——

namespace SourceGenerator.Generated
{public class GeneratedProgram{public static void HelloWorld(){Console.WriteLine(""Hello from incremental generator!"");}}
}

然后安装了Roslyn,也就是Microsoft.CodeAnalysis包。按照项目配置了

<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>

然后在目标项目(此时是空的)中引用生成的代码。首先将生成器项目引入——

<!-- 目标项目 SourceGeneratorDemo.csproj -->
<ItemGroup><ProjectReference Include="..\SourceGeneratorDemo.HelloWorldGenerator\SourceGeneratorDemo.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>

我们生成的代码在SourceGenerator.Generated命名空间下,包含一个类GeneratedProgram,带有一个方法void HelloWorld();

// 目标项目 Program.cs
using static System.Console;
using SourceGenerator.Generated;GeneratedProgram.HelloWorld(); // 直接使用了顶级语句

当写完上面这部分的时候在生成之前,SourceGenerator.GeneratedGeneratedProgram是会标红色波浪线的(前者为CS0246,后者为CS0103),这是正常的,因为生成的代码还没有通过编译器加载到目标项目。所以自然是找不到生成的这些元素的。

按照预期,只要我生成运行整个解决方案,那么Roslyn会调用生成器SourceGeneratorDemo.Generators.HelloWorldGenerator 生成出预期的代码,然后将这段生成的代码加入到目标项目中来。只要我重新打开Program.cs,IntelliSense就应该正确解析SourceGenerator.GeneratedGeneratedProgram这两个符号。

有趣的部分

然而,有趣的部分来了,虽然在生成解决方案之后目标项目被正确构建并且弹出了控制台输出了

Hello World

但是Program.cs中的红色波浪线依然没有消失!也就是说编辑器还在提示我CS0103和CS0246,也就是IntelliSense还是找不到SourceGeneratorDemo.GeneratedGeneratedProgram。按下F12也不能导航到生成代码下。

在多次重启IDE、清理重新构建项目、删除.vs缓存之后问题仍然存在,在网上搜了半天,没找到有效的解决方法(可能也是我想尽办法也没有描述清楚),于是就开始问Copilot。

Good End

与 Copilot battle了半天(查看需要T子),期间尝试过找茬<ProjectReference>namespace以及<EnforceExtendedAnalyzerRules>等诸多要素。最终确定,问题出在生成器项目的项目文件——

<ItemGroup><PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="5.0.0" PrivateAssets="all" />
</ItemGroup>

VS2022在安装时自动选择了5.0版本,虽然能正确生成和运行项目,但是与VS2022 IDE使用的Roslyn版本不匹配(Copilot是如此声称的)。

最终我们发现只要把Version改为4.14.0,清理并重新生成解决方案,重新打开Program.cs就不再有问题了。

http://www.rkmt.cn/news/191897.html

相关文章:

  • Nginx+Docker组合拳,轻松搞定微服务负载均衡,99%的人都忽略了这一点
  • ServerStatus终极监控指南:三分钟搭建专业级云探针系统
  • 突破传统:5种创新方式构建下一代AI应用
  • 模糊测试工具的高级应用技巧与实践指南
  • 2025年质量好的PTC纯水加热器热门厂家排行TOP(权威版) - 品牌宣传支持者
  • 如何快速提取APK文件中的网络端点:完整安全分析指南
  • MyBatis数据源架构:3分钟掌握连接池优化核心技巧
  • 构建下一代AI制品供应链:FOLib的模块化架构与演进蓝图
  • libcurl终极配置指南:32位/64位dll快速集成全解析
  • 2025年评价高的自动化框架钣金加工厂家推荐及采购参考 - 品牌宣传支持者
  • 揭秘Docker多容器并发运行难题:5个关键步骤实现高效并行处理
  • 完整掌握数据挖掘:韩家炜最新版课件获取指南
  • 从零构建移动端智能垃圾分类系统:MobileNetV1_ms实战指南
  • 东方博宜OJ 1314:仰卧起坐成绩统计 ← 结构体 + 结构体排序
  • 7步掌握Supabase CLI:从零构建全栈应用的高效开发工具
  • 技术新闻仿写Prompt
  • 盘点2026年更值得关注的动力环境监控系统推荐,让您的机房管理智能化升级
  • 2025年评价高的单缸液压圆锥破碎机/多缸液压圆锥破碎机优质厂家推荐榜单 - 品牌宣传支持者
  • Day5常见错误
  • 2025年口碑好的黑色PE布优质厂商精选榜(口碑优) - 品牌宣传支持者
  • 用python、JavaScript (Node.js)、JAVA等多种语言的教你如何获取股票数据(实时信息、历史数据、CDMA、KDJ等指标内容)配有股票数据API接口说明
  • 2025年热门的学校油烟机清洗/酒店油烟机清洗厂家采购指南榜(选购必看) - 品牌宣传支持者
  • MacOS系统镜像终极收藏指南:1984-2024完整版下载
  • 2025年口碑好的正规遗嘱库机构推荐,靠谱遗嘱服务企业全解析 - 工业品网
  • 工业通信接口配置:OpenPLC串口与以太网设置实践
  • 2025宁波办公室绿植租赁公司TOP5权威推荐:口碑好+专业服务双维度测评 - 工业设备
  • 实用指南:专题:2025年汽车行业研究报告-重塑之局:新能源、智能网联与全球化|附340+份报告PDF、数据、可视化模板汇总下载
  • 终极指南:Vita3K PlayStation Vita模拟器 - 在电脑上畅玩经典游戏
  • WeCMDB配置管理系统终极指南:构建企业级IT资产管理平台
  • ext4日志终极实战手册:从系统崩溃到毫秒级恢复的完整指南