我刚刚了解到NRefactory 5,我猜想它是我目前问题最适合的解决方案。目前,我正在开发一个小型C#脚本应用程序,我希望提供代码自动完成功能。最近我一直在使用微软的“Roslyn”项目来实现这个功能。但由于此项目的最新更新需要.NET Framework 4.5,而我希望该应用程序也能在Win XP下运行,因此我不能再使用该技术。所以我必须转向另一种技术。
我的问题不是编译问题。使用.NET CodeDomProvider也可以完成这项工作,但需要更多的工作量。问题在于代码自动完成。据我所知,NRefactory 5提供了提供代码自动完成所需的所有内容(解析器、类型系统等),但我只是无法弄清如何使用它。我查看了SharpDevelop源代码,但他们在那里并没有使用NRefactory 5来进行代码自动完成,他们只将其用作反编译器。由于在网络上找不到关于如何将其用于代码自动完成的示例,因此我认为我可能会在这里找到一些帮助。
情况如下。我有一个包含脚本代码的单个文件。实际上它甚至不是一个文件,而是从编辑器控件中获取的一个字符串(顺便说一下:我正在使用AvalonEdit。非常棒的编辑器!),以及需要引用的一些程序集。因此,没有解决方案文件、项目文件等,只有一个源代码字符串和这些程序集。
我查看了NRefactory 5附带的演示版和Code Project上的文章,得到了类似于这样的东西:
我的问题不是编译问题。使用.NET CodeDomProvider也可以完成这项工作,但需要更多的工作量。问题在于代码自动完成。据我所知,NRefactory 5提供了提供代码自动完成所需的所有内容(解析器、类型系统等),但我只是无法弄清如何使用它。我查看了SharpDevelop源代码,但他们在那里并没有使用NRefactory 5来进行代码自动完成,他们只将其用作反编译器。由于在网络上找不到关于如何将其用于代码自动完成的示例,因此我认为我可能会在这里找到一些帮助。
情况如下。我有一个包含脚本代码的单个文件。实际上它甚至不是一个文件,而是从编辑器控件中获取的一个字符串(顺便说一下:我正在使用AvalonEdit。非常棒的编辑器!),以及需要引用的一些程序集。因此,没有解决方案文件、项目文件等,只有一个源代码字符串和这些程序集。
我查看了NRefactory 5附带的演示版和Code Project上的文章,得到了类似于这样的东西:
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?还需要什么?等等。你可以看到,目前有很多事情是非常不清楚的,我希望你能为此带来一些光明。
非常感谢您提前的帮助!