2010-03-22 2 views
4

VS 2010 SDK RC를 사용하여 Visual Studio 편집기 확장을 작성하고 있습니다. 현재 프로젝트의 참조가 무엇인지 알아낼 수 있기를 바랍니다. 현재 편집기에 해당하는 프로젝트에 어떻게 액세스합니까?Visual Studio MEF 편집기 확장에서 프로젝트 시스템에 액세스

documentation on editor extensions에는 Visual Studio의 비 편집기 부분에 액세스하는 방법에 대한 정보가 포함되어 있지 않습니다. 몇 가지 검색을했는데 그것은 VS2008에서 프로젝트 시스템에 액세스 할 수있는 추가 기능을 작성할 수있는 것처럼 보이지만 MEF 편집기 확장에서이 기능을 사용하려고합니다.

답변

10

다니엘 -

편집기에서 프로젝트로 가져 오는 과정은 여러 단계로 진행됩니다. 먼저 편집기에서 파일의 파일 이름을 가져오고 포함 된 프로젝트를 찾을 수 있습니다.

이 같은 파일 이름을 얻을, 당신은 IWPFTextView을 가지고 있습니다 가정 :

public static string GetFilePath(Microsoft.VisualStudio.Text.Editor.IWpfTextView wpfTextView) 
{ 
    Microsoft.VisualStudio.Text.ITextDocument document; 
    if ((wpfTextView == null) || 
      (!wpfTextView.TextDataModel.DocumentBuffer.Properties.TryGetProperty(typeof(Microsoft.VisualStudio.Text.ITextDocument), out document))) 
     return String.Empty; 

    // If we have no document, just ignore it. 
    if ((document == null) || (document.TextBuffer == null)) 
     return String.Empty; 

    return document.FilePath; 
} 

당신은 파일 이름을 가지고하면, 당신이이 같은 부모 프로젝트의 얻을 수 있습니다 :

using Microsoft.VisualStudio.Shell; 
using Microsoft.VisualStudio.Interop; 

public static Project GetContainingProject(string fileName) 
{ 
    if (!String.IsNullOrEmpty(fileName)) 
    { 
     var dte2 = (DTE2)Package.GetGlobalService(typeof(SDTE)); 
     if (dte2 != null) 
     { 
      var prjItem = dte2.Solution.FindProjectItem(fileName); 
      if (prjItem != null) 
       return prjItem.ContainingProject; 
     } 
    } 
    return null; 
} 

프로젝트에서 당신은 codemodel을 얻을 수 있고, 나는 참고 문헌을 추측하지만, 아직 그렇게 할 필요가 없다. 이 도움이

희망 ...

~ 카메론

+0

감사합니다! 참조를 얻으려면 VSProject 객체를 가져와야합니다. Project.Object를 VSProject로 형변환 할 수 있습니다. if (project.Object가 VSProject 임) {var vsProject = (VSProject) project.Object;/* ... * /} –

+0

다른 사람들이 다음에 대한 참조 요구 사항을 만족시키지 못하는 경우 : Visual Studio 2015에서 파일 이름 조회 작업을 수행하기 위해 Microsoft.VisualStudio.Text.Logic에 대한 참조를 추가해야했습니다 'TextDataModel.DocumentBuffer'). 프로젝트 조회 작업 ('DTE2'와'Project')을 만들기 위해'EnvDTE'와'EnvDTE80'에 대한 참조를 추가해야했습니다. – Spiralis