我有一个基于roslyn的小应用程序,用于基于sample provided at codeplex的VB.NET / C#项目的代码格式化。此应用程序是我基于DTE开发的旧版代码格式化程序的新版本,其中我以编程方式在特定解决方案中的每个文件上运行Visual Studio命令Edit.FormatDocument
,如下所示:
projectItem.Document.DTE.ExecuteCommand("Edit.FormatDocument");
这已不再可接受,因此我开始开发与FormatDocument命令执行相同任务的新版本。 VB.NET源文件中此命令的一个特性是它可以修正关键字和名称的大小写,例如:
public
变为Public
,fooBar
但用作foobar
=>使用情况更改为fooBar
首先,我认为仅Microsoft.CodeAnalysis.Formatting.Formatter.FormatAsync(...)
就可以完成这项任务,但似乎只关注空白。因此,我开始寻找其他地方并发现方法Microsoft.CodeAnalysis.CaseCorrection.CaseCorrector.CaseCorrectAsync(...)
但遗憾的是CaseCorrector
类internal
。这让我很奇怪,考虑到方法CaseCorrectAsync
是public
是不是一个错误。
在我的基于roslyn的新应用程序中是否有合理的方法来运行案例更正?
答案 0 :(得分:0)
正确的解决方案实际上是根据roslyn bug report中的评论使用CaseCorrector
类public
。所以要解决这个问题,现在必须公开CaseCorrector
,在本地构建roslyn并使用修改后的二进制文件。
如果需要,应该可以利用BuildNuGets.csx script来创建包含本地更改的roslyn nuget包。