源生成器:有关引用项目的信息?

Posted

技术标签:

【中文标题】源生成器:有关引用项目的信息?【英文标题】:Source Generator: information about referencing project? 【发布时间】:2021-03-12 05:04:27 【问题描述】:

我开始使用 C# 源代码生成器。

我想要的是启动一个git describe --tags --long 进程并使用当前标签和哈希码作为属性填充一个静态GitVersion 类。

问题是,我没有关于引用项目目录的信息,所以我不知道在哪里运行 git 进程。 我在Execute 函数的GeneratorExecutionContext 参数中找不到任何有用的信息。

AppDomain.CurrentDomain 指向 csc.exe 进程所以我想没有办法知道它在那里?

【问题讨论】:

【参考方案1】:

我最终使用了:

public void Execute(GeneratorExecutionContext context) 
     var mainSyntaxTree = context.Compilation.SyntaxTrees
                          .First(x => x.HasCompilationUnitRoot);

     var directory = Path.GetDirectoryName(mainSyntaxTree.FilePath);

【讨论】:

【参考方案2】:

目前您无法从GeneratorExecutionContext获取参考项目目录,但您可以通过手动指定.csproj的meta来传递路径信息,然后在生成时检索路径meta。

【讨论】:

有没有例子说明如何做到这一点?根据您的建议将其可视化为实现有点困难。谢谢 @Andrew:我找到了一种更简单的方法,如下所示。 context.AnalyzerConfigOptions.GlobalOptions .TryGetValue("build_property.MSBuildProjectDirectory", out var projectDirectory);

以上是关于源生成器:有关引用项目的信息?的主要内容,如果未能解决你的问题,请参考以下文章

来自引用项目的 ASP.NET 自定义配置部分不起作用?

在另一个项目 c# 中使用引用项目的 WCF 服务

Qt - 引用项目的 main() 函数覆盖实际项目的 main()

在一个多模块的python项目中,如何在子模块中引用项目的根目录?

没有为此解决方案配置选中要生成的项目

可用项目的 Django ListView 查询集