2017-06-13 11 views
1

Roslynで特定のポイントにコードを追加する方法はありますか(roslynも含まれていません)?これは私の問題です:私は、コンテキストメニュー(コマンドウィンドウ内)でコマンドを追加するvspackageを開発します。右クリックしてこのコマンドを選択すると、そのポイントにいくつかのコードが追加されます。 この問題を解決するにはどうすればよいですか?Roslynで特定のポイントにコードを追加

+0

あなたが助けを求めてからしばらく経っていますが、私は好奇心が強いです。下の私のソリューションはあなたのために働いたのですか? – wobuntu

答えて

0

あなたは持っている:

  • は、Visual Studioの現在のテキストウィンドウを受け取る
  • はtextbuffer内の位置
  • は、あなたのテキストを挿入する(キャレット位置を設定しますマウスの右ボタンをクリック)を取得

最初のものが最初です。テキストビューを受け取る:

public static IWpfTextView GetCurrentTextView(Package package) 
{ 
    try 
    { 
     var serviceProvider = package as IServiceProvider; 
     IVsTextManager textManager = (IVsTextManager)serviceProvider.GetService(typeof(SVsTextManager)); 

     IVsTextView textView; 
     textManager.GetActiveView(1, null, out textView); 

     IComponentModel componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel)); 
     var factoryService = componentModel.GetService<IVsEditorAdaptersFactoryService>(); 

     return factoryService.GetWpfTextView(textView); 
    } 
    catch 
    { 
     return null; 
    } 
} 

はそこからキャレット位置を取得し、あなたのテキストを挿入します。

IWpfTextView textView = GetCurrentTextView(package); 
SnapshotPoint caretPosition = textView.Caret.Position.BufferPosition; 
textView.TextBuffer.Insert(caretPosition, "HELLO WORLD"); 

は、エラー処理を追加することを忘れないでください。

関連する問題