我刚刚发现了 NRefactory 5,我猜它是最适合我当前问题的解决方案。目前我正在开发一个小的 C# 脚本应用程序,我想为其提供代码完成。直到最近,我还是使用 Microsoft 的“Roslyn”项目完成了这项工作。但由于该项目的最新更新需要 .Net Framework 4.5,我不能再使用它,因为我希望该应用程序也可以在 Win XP 下运行。所以我必须在这里切换到另一种技术。
我的问题不是编译的东西。.Net CodeDomProvider 也可以通过更多的努力来做到这一点。问题在于代码完成的东西。据我所知,NRefactory 5 提供了提供代码完成所需的一切(解析器、类型系统等),但我就是不知道如何使用它。我查看了 SharpDevelop 源代码,但他们没有使用 NRefactory 5 来完成代码,他们只使用它作为反编译器。因为我也找不到如何在网络中使用它来完成代码的示例,所以我想我可能会在这里找到一些帮助。
情况如下。我有一个包含脚本代码的文件。实际上,它甚至不是文件,而是我从编辑器控件获得的字符串(顺便说一句:我为此使用 AvalonEdit。很棒的编辑器!)和一些需要引用的程序集。因此,没有解决方案文件,没有项目文件等,只有一串源代码和程序集。
我查看了 NRefactory 5 附带的 Demo 和关于代码项目的文章,并得到了这样的内容:
var unresolvedTypeSystem = syntaxTree.ToTypeSystem();
IProjectContent pc = new CSharpProjectContent();
// Add parsed files to the type system
pc = pc.AddOrUpdateFiles(unresolvedTypeSystem);
// Add referenced assemblies:
pc = pc.AddAssemblyReferences(new CecilLoader().LoadAssemblyFile(
System.Reflection.Assembly.GetAssembly(typeof(Object)).Location));
我的问题是我不知道如何继续。我什至不确定这是否是实现我目标的正确方法。如何使用CSharpCompletionEngine?还需要什么?等等。您看到目前有很多事情还不清楚,我希望您能对此有所了解。
提前非常感谢大家!