2017-06-13 30 views
1

有沒有辦法在Roslyn(也沒有roslyn)的特定點添加代碼?這是我的問題:我開發一個在上下文菜單中添加命令的vspackage(在CODE WINDOW中)。當我點擊右鍵並選擇這個命令時,它應該添加一些代碼。 我該如何解決這個問題?在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"); 

不要忘記添加錯誤處理。