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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:17:09