如何在Source Generator中获取引用项目路径并提取IncrementalValueProvider有效值
需求与问题
我需要基于目标/引用项目的文件夹结构,使用Source Generator对图片文件执行逻辑,因此需获取目标/引用项目的路径。
第一种尝试
namespace SourceGen { [Generator] public class Class1 : IIncrementalGenerator { public void Initialize(IncrementalGeneratorInitializationContext context) { var projDirectory = context.AnalyzerConfigOptionsProvider .Select((x, _) => x.GlobalOptions .TryGetValue("build_property.MSBuildProjectDirectory", out var projectDirectory)? projectDirectory : null); File.AppendAllText("\\" + "log.txt", projDirectory ); } } }
我通过写入文件调试,但日志仅输出IncrementalValueProvider<string>的类型而非实际路径值:
Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.String]
第二种尝试
参考Stack Overflow的一个方案后写出以下代码:
var mainSyntaxTree = context.CompilationProvider.Select((x, _) => x.SyntaxTrees.First(x => x.HasCompilationUnitRoot)); var directory = Path.GetDirectoryName(mainSyntaxTree.Select((x, _) => x.FilePath));
出现类型不匹配问题:Path.GetDirectoryName()期望string类型参数,但传入的是IncrementalValueProvider<string>,不知道该如何提取有效的FilePath字符串。
第三种尝试
这次日志文件直接没生成:
var provider = context.AnalyzerConfigOptionsProvider.Select((x, _) => { x.GlobalOptions.TryGetValue("build_property.MSBuildProjectDirectory", out var projectDirectory); File.AppendAllText("\\" + "log.txt", "testing" + projectDirectory); return projectDirectory; });
请问我遗漏了什么才能实现获取目标项目路径的需求?
内容的提问来源于stack exchange,提问作者Cfun
相关产品推荐
相关产品推荐

