2011-03-13 7 views
1

Visual Studio 편집기에서 파일을 열면 EnvDTE.Document.Language 속성을 통해 "CSharp", "C/C++", "HTML", "JScript"등과 같은 문자열 결과가 반환되어 파일의 언어를 지정합니다 . 파일이 열려 있지 않으면 (즉, ProjectItem 컨텍스트에서) 동일한 언어 정보에 액세스 할 수 있기를 원합니다.vsx에서 문서를 열지 않고 ProjectItem 언어 유형을 확인하는 방법은 무엇입니까?

EnvDTE.ProjectItem.FileCodeModel.Language 유망한 것처럼 보였지만 CSharp 파일에 대한 결과 만 제공했습니다. HTML, XAML 등의 정보가 없습니다.

파일 확장자를 기반으로 가정을 할 수는 있지만 Visual Studio (아마도 언어 서비스를 통해)가 해석 한 언어를 검색 할 수는 있습니다. 더 강력합니다. 그것은 정보가 문서에 저장되어 있기 때문에 사용할 수있는 것처럼 보이지만 액세스 할 수있는 올바른 API를 찾을 수 없었습니다.

도움이나 의견을 크게 주시면 감사하겠습니다. :)

답변

3

이 문제에 직면 할 수있는 다른 사람들에게 나는 작동 할 접근법을 발견했습니다. 나는 여전히 누구나 청결한 해결책이 있는지 듣고 싶다.

  • Microsoft.VisualStudio.Package.LanguageService.9.0 (또는 동등한) 어셈블리를 가져옵니다.
  • 알려진 상수에 대해 반환 된 언어 서비스 GUID를 비교하여 프로젝트 항목 (예 : System.IO.Path.GetExtension (ProjectItem.Name))의 확장을 전달하는 EditorFactory 인스턴스
  • 전화 GetLanguageService EditorFactory의 인스턴스 . 내가 그렇지 않으면 사람을 저장하는 것으로 당신은 (동등하거나) HKEY_USERS \ .DEFAULT \ 소프트웨어 \ 마이크로 소프트 \으로 VisualStudio \ 10.0_Config \ 언어 \ 언어 서비스에서 레지스트리 여기

언어 서비스의 GUID입니다에서이 파다 수 있습니다 그들을 보는 문제 :

CSHARP : "{694DD9B6-B865-4C5B-AD85-86356E9C88DC}"
C/C++ : "{B2F072B0-ABC1-11D0-9D62-00C04FD9DFD9}"
CSS : "{ "{59E2F421-A764E898-518D-11d2-9A89-00C04F79EFC3}"
HTML : "{58E975A0-F8FE-11D2-A6AE-00104BCC7269}"
JScript : 410A-4fc9-9803-1F4E79216BE8} "
XAML :"{c9164055-039b-4669-832d-f257bd5554d4} "
XML :"{f6819a78-a205-47b5-be1c-675b3c7f0b8e} "

참고 : I JScript 언어 서비스가 기본적으로 HTML에 잘못 매핑된다는 것을 발견했습니다.