現在アクティブなドキュメントからアセンブリファイル(Dll)を生成しようとしています。ビジュアルスタジオプロジェクトでDTE/DTE2を使用してアクティブなドキュメントのソースコードを読む方法
Ex。私は3つのC#ソースファイル - file1.cs、file2.cs、file3.csを持っていて、現在エディタにfile2.csを開いています。私はRoslynコンパイラAPIを使用して、単一のファイルfile2.dllに対してのみアセンブリDLLを構築する必要があります。
現在アクティブなドキュメントからアセンブリファイル(Dll)を生成しようとしています。ビジュアルスタジオプロジェクトでDTE/DTE2を使用してアクティブなドキュメントのソースコードを読む方法
Ex。私は3つのC#ソースファイル - file1.cs、file2.cs、file3.csを持っていて、現在エディタにfile2.csを開いています。私はRoslynコンパイラAPIを使用して、単一のファイルfile2.dllに対してのみアセンブリDLLを構築する必要があります。
次のコードで現在のドキュメントのテキストを取得することができます:
EnvDTE.TextDocument textDocument = (EnvDTE.TextDocument)DTE.ActiveDocument.Object("TextDocument");
EnvDTE.EditPoint editPoint = textDocument.StartPoint.CreateEditPoint();
string result = editPoint.GetText(textDocument.EndPoint);
一瞬、「それが動作しない場合があります」についての懸念を無視するのではなく、テキストを取得し、より実際の構文木を取得Roslyn APIを使ってコンパイルしてください。 VisualStudioWorkspace
または他の場所から入手できます。つまり、ファイルを自分で再解析する必要はありません。これは、ユーザーが#if指示文などを持っていれば難しい可能性があります。また、ワークスペースAPIからSourceTextを取得することもできます。再解析が必要な場合はパーサーに直接渡すことができますが、文字列を再構築するよりもはるかに効率的です。
ありがとう、ジェイソン、これを実装する方法のソースがありますか? –
これを行うにはいくつかの方法がありますが、これはまずあなたが何をしているかによって異なります。あなたは何を造ろうとしていますか? –
Roslyn APIを使用して現在のソースドキュメントをコンパイルする必要があります –
一般的にそうすることはできません。 (ファイルがお互いに依存する場合はどうすればよいでしょうか?参照/プロジェクト設定/ビルドの手順は?) – SLaks
一般的に、クラスが完全に自己完結型でない限り、これは機能しません。 –
Roslyn API - CSharpCompilationを使用して、このソースがコンパイル単位を作成する際に使用するすべての参照をリンクできたら、ありがとうございます。 –