我正在寻找一种方法来生成常量类c#文件(s)的图像文件名在我的项目。所以我可以在代码和xaml中使用它们,运行时和设计时,当类重新生成时(当图像文件发生更改时),这将突出潜在的问题。
在过去的一个项目中,我们使用TypeWriter,它使用反射来查看项目文件,并运行我们自己的脚本来生成基于脚本中定义的模板的代码文件。
我讨厌魔法弦,只是想要这种额外的安全级别。
我想要完成,以及Xamarin共享项目,它也需要在iOS和Android项目中可用。
理想情况下,我希望在文件更改时触发脚本,但这可以手动运行。
我正在使用Visual Studio for Mac,所以Nuget包/扩展较少。
我希望可以轻松地扩展此功能,以便在app.xml.cs中为颜色创建常量。
2条答案
按热度按时间cidc1ykv1#
就像其他人在评论中指出的那样,这是源代码生成器的一个很好的用例。
实际上,我想要这个功能已经有一段时间了,所以我继续写了一个概念实现的证明:
字符串
在你的项目文件中,你可以指定文件夹来生成常量,如下所示:
型
然后它将生成如下常量:
型
由于使用源代码生成器的项目的设置有一些移动部分,我将完整的解决方案上传到github:sourcegen-fileexplorer
编辑器支持仍然有点不稳定,它在Visual Studio中工作得很好,即使在编辑生成器本身的代码时,它有时需要重新启动,突出显示和完成目前在Rider中由于this而被破坏。
无法在Visual Studio for Mac中测试,抱歉。
我也不确定这是否会很好地集成到Xamarin项目中,但我不认为应该有太多问题。
保存输出
您可以通过将以下内容添加到.csproj将生成器输出保存到磁盘:
型
更长的解释可以在这里找到:https://andrewlock.net/creating-a-source-generator-part-6-saving-source-generator-output-in-source-control/的
91zkwejq2#
这是一个关于如何使用msbuild而不是像我的另一个答案那样使用源代码生成器的例子。
自定义任务:
字符串
FileExplorer.targets文件:
型
然后在.csproj中:
型
这是github repo的完整示例:msbuild-fileexplorer的数据。
在VS 2019和Rider中测试。
请记住,我不是一个msbuildMaven,这个解决方案可能会有所改进。