NRefactory 5について知りましたが、これが現在の問題に最も適したソリューションだと思います。現在、コード補完を提供したい小さなC#スクリプトアプリケーションを開発しています。最近まで、私はMicrosoftの「Roslyn」プロジェクトを使用してこれを行ってきました。ただし、このプロジェクトの最新の更新には.Net Framework 4.5が必要なため、アプリをWin XPでも実行したいので、これを使用することはできません。そのため、ここで別のテクノロジーに切り替える必要があります。
私の問題はコンパイルのものではありません。これは、.Net CodeDomProviderによっても、もう少し努力して行うことができます。問題はコード補完のものです。私の知る限り、NRefactory 5は、コード補完を提供するために必要なすべてのもの(パーサー、型システムなど)を提供しますが、その使用方法がわかりません。SharpDevelopのソースコードを調べましたが、コードの補完にNRefactory 5を使用せず、逆コンパイラとしてのみ使用しています。ネットでコード補完に使用する方法の例も見つからなかったので、ここで役立つかもしれないと思いました。
状況は以下のとおりです。スクリプトコードを含む単一のファイルがあります。実際には、ファイルではなく、エディターコントロールから取得した文字列(ちなみに、これにはAvalonEditを使用しています。すばらしいエディターです!)と、参照する必要のあるいくつかのアセンブリです。したがって、ソリューションファイルやプロジェクトファイルなどはなく、ソースコードとアセンブリの1つの文字列だけです。
NRefactory 5に付属しているデモとコードプロジェクトに関する記事を見て、次のようなものを思いつきました。
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の使用方法は?他に何が必要ですか?現時点では非常に不明確なことがたくさんありますので、これに光を当てていただければ幸いです。
よろしくお願いします!