源生成器:有关引用项目的信息?
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);以上是关于源生成器:有关引用项目的信息?的主要内容,如果未能解决你的问题,请参考以下文章
Qt - 引用项目的 main() 函数覆盖实际项目的 main()