1

Visual Studio エディターでファイルを開くと、EnvDTE.Document.Languageプロパティを通じて、"CSharp"、"C/C++"、"HTML"、"JScript" などの文字列の結果が返され、言語を指定します。ファイル。ファイルが開かれていないとき (つまり、ProjectItem コンテキストから) に同じ言語情報にアクセスできるようにしたいと考えています。

EnvDTE.ProjectItem.FileCodeModel.Languageは有望に思えましたが、CSharp ファイルの結果しか得られませんでした。HTML、XAML などの情報はありませんでした。

ファイル拡張子に基づいて推測することもできますが、Visual Studio によって (おそらく言語サービスを通じて) 解釈された言語を取得できれば、はるかに堅牢になります。ドキュメントに保存されているため、情報は利用できるようですが、アクセスするための適切な API を見つけることができませんでした。

どんな助けや提案も大歓迎です。:)

4

1 に答える 1

3

これに出くわす可能性のある他の人のために、私はうまくいくアプローチを見つけました. 誰かがよりクリーンなソリューションを持っているかどうか、私はまだ興味があります。

  • Microsoft.VisualStudio.Package.LanguageService.9.0 (または同等の) アセンブリをインポートします。
  • EditorFactory をインスタンス化する
  • EditorFactory インスタンスで GetLanguageService を呼び出し、プロジェクト アイテムの拡張子を渡します (つまり、System.IO.Path.GetExtension(ProjectItem.Name))。
  • 返された言語サービス GUID を既知の定数と比較します。HKEY_USERS\.DEFAULT\Software\Microsoft\VisualStudio\10.0_Config\Languages\Language Services (または同等のもの) の下のレジストリからこれらを掘り出すことができます。

他の誰かが検索する手間を省くために私が見つけた言語サービス GUID を次に示します。

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

注: JScript 言語サービスがデフォルトで HTML に正しくマッピングされていないことがわかりました。

于 2011-03-14T00:15:14.680 に答える