可以物理访问 Source Generator 创建的文件吗?

Posted

技术标签:

【中文标题】可以物理访问 Source Generator 创建的文件吗?【英文标题】:Can Source Generator created files be physically reached? 【发布时间】:2022-01-20 01:38:43 【问题描述】:

是否有任何标准方法/选项,如何安排通过Source Generators 生成并添加到构建过程中的文件在项目结构中也是物理可见的(因此开发人员可以查看结果代码,例如通过 VS 解决方案资源管理器窗口) ?

我的意思是除了我将代码直接保存到生成器的Execute() 中的一个文件之外,我预计这可能会带来其他复杂性(尚未尝试过)。

编辑:

据此:https://github.com/dotnet/roslyn/issues/49249#issuecomment-809807528,生成器执行期间不允许 I/O。 根据debug session(进入生成代码功能),生成的源码至少在temp文件夹下,如C:\Users\user\AppData\Local\Temp\.vsdbgsrc\some-guid\FileNameHint.cs。不幸的是,标准 VS 导航 (F12) 不起作用(无论调试会话活动如何)。

【问题讨论】:

【参考方案1】:

使用生成器将以下内容添加到项目中:

<PropertyGroup>
    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>DesiredPathForGeneratedStuff</CompilerGeneratedFilesOutputPath>
</PropertyGroup>

【讨论】:

非常感谢,正在寻找在 .NET 6 中恢复 *.razor.g.cs 文件的方法

以上是关于可以物理访问 Source Generator 创建的文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

C# 强大的新特性 Source Generator

Source Generator初探

Source Generator 单元测试

shell 执行方式

Source Generator实战

十倍程序员 | 使用 Source Generator 将 JSON 转换成 C# 类