Roslyn 5和VS2022中不散的红色浪线问题怎么解决?
摘要:本文地址:https:www.cnblogs.comoberon-zjt0806p19429665 同步更新至知乎 目录首先祝大家2026新年快乐!🎉🐴前请提要有趣的
本文地址:https://www.cnblogs.com/oberon-zjt0806/p/19429665
同步更新至知乎
目录首先祝大家2026新年快乐!🎉🐴前请提要有趣的部分Good End
首先祝大家2026新年快乐!🎉🐴
先说本文的结论——
Visual Studio 2022的IntelliSense似乎不能和Roslyn 5.0良好配合,导致MSBuild无法加载到生成器构建的代码
如果想在Visual Studio 2022中使用代码分析服务,请确保引用的Nuget包Microsoft.CodeAnalysis的版本为4.x
MSDN文档列举了Roslyn版本与具体IDE的兼容情况,详见这里
另外,如果目标项目的CS0103或者CS0246没有立即褪去,那么你需要关闭报错的文件,清理并重新生成解决方案。
如果非要使用Roslyn 5.0,那么应该使用VS2026
前请提要
昨天想接触一下传说中的源代码生成器(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 string
var 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 SourceGeneratorDemo.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>
然后在目标项目(此时是空的)中引用生成的代码。
