使用 Roslyn 语法重写器编译或加载之前的 Unity 脚本预处理?

Unity script preprocessing before compile or load with Roslyn Syntax Rewriter?

我正在寻找在 Unity3d 项目中“rewrite/tweak”C# 脚本的方法,介于我在 VS 中编辑它们和在 running/building Unity 编辑器中的项目之前进行编译。我已经看到 Roslyn Source Generators 可以集成到 Unity 中,但我更愿意使用 Roslyn Syntax Rewriter,如果我能找到一种方法的话。似乎不可能将语法重写器集成到 VS 中的普通 .NET 构建中(如果这样做的话会很棒)但我在想也许 Unity 有一些我可以使用的钩子?也许在编辑后重新加载脚本资源?我不想让更改永久化,但只对构建过程可见。我可以在这里使用任何其他钩子或技巧吗?如果我能得到脚本文本并在构建之前稍微转换一下……我会很高兴……

我认为您正在寻找 IPreprocessBuildWithReport.OnPreprocessBuild 它允许您在构建开始之前 运行 任何东西。

请注意,如果您修改其中的任何文件,它可能仍然是永久性的。

我认为您可以通过使用版本控制轻松防止这种情况发生,并在构建后重置 ;)

或者您当然可以以某种方式存储您的更改(例如在复制的临时文件中)并在 IPostprocessBuildWithReport.OnPostprocessBuild.

中还原

或者,如果您知道自己在做什么,您可以修改 IIl2CppProcessor.OnBeforeConvertRun 中的预编译程序集,这不会影响您的 c# 源代码文件,而只会影响在将它们转录为 c++ 之前构建的托管程序集