2016-09-07 7 views
0

入れ子になった/再帰的な検索と置換を含むVisual Studio拡張を作成しています。 Visual Studioの[Find in Files]ダイアログ(いくつかのオプションがあります)と一致するように検索コントロールを追加します。私は "これらのファイルの種類を見てください:"コンボを実装しようとしています。私は、利用可能なコンテンツの種類を反復処理し、次のようにそのコンテンツ用の拡張機能を反復したものを使用しています:IFileExtensionRegistryService.GetExtensionsForContentTypeは "CSharp"コンテンツタイプの空の配列を返します

IContentTypeRegistryService content = ... 
IFileExtensionRegistryService extensions = ... 

foreach (IContentType type in content.ContentTypes) 
{ 
    foreach (string extension in extensions.GetExtensionsForContentType(type)) 
    { 
     ... 
    } 
} 

しかし、「CSHARP」(C++および他の多くの言語)、延長のようないくつかのコンテンツタイプについてGetExtensionsForContentTypeから返された配列は空です。私は見て見ましたが、私はMSDN、StackOverflow、またはなぜ何か他の方法を説明するWebでさえ見つけられません。

はところで:奇妙なことがが呼び出しからリターンを行うことの拡張子は、通常ものであることであるは、「ファイルから検索」ダイアログに表示されません。

答えて

1

私は知恵を出してすぐに私がここに質問を投稿するとすぐに分かりません。それは働き始めます。ここで説明されている動作を引き起こしていた原因はわかりませんが、今はすべてを拡張しています。私は何もしなかった、それはちょうど作業を開始したので、これは非常に奇妙です。

ところで、まだファイル内の検索に表示されているものが表示されません。それは、VSがFind in Filesの拡張リストを連結しているようです。連結するものを決定するためにどの基準を使用するかわからないので、より明示的な型の一覧がもっとたくさんあります。

アップデート:私のツールウィンドウは、前回VSがシャットダウンされたことを開いたとき、それは行方不明の拡張子の問題のように見えることが判明

が起こります。 VSはこれを覚えていて、次に実行すると自動的に表示します。残念ながら、Package.InitializeとToolWindowPaneはの前にのように作成され、コンテンツタイプは完全に初期化されています。私はもともと、私は合理的なように見えたSolutionExistsAndNotBuildingAndNotDebugging_stringを、持っていた(ProvideAutoLoadAttributeに異なる値を試してみたが、それでもShellInitialized_stringは役立ちません

最終解決:。。さまざまな状況を検出することができるように

に見えますがありパッケージ上の2つのCreateToolWindowオーバーライドがある。一つはTypeGuidを取り、他の。Guidバージョンはツールウィンドウが作成されたときに前に、コンテンツの拡張が初期化されていると呼ばれている。Typeバージョンを起動するために作成したコマンドから呼び出されますこの窓は確かに起こるのでの後の拡張子が初期化されます。 (Guidバージョンが呼び出されたときに、あなたのコマンドは決して実際には実行されないという事実をキーにすることができます)。

本当に検出は状況証拠のみに基づいているため、私はむしろIFileExtensionRegistryServiceを直接照会して完全に初期化されているかどうかを調べることができますが、そのようなプロパティやメソッドは存在しないようです。もっと良い解決策を見つけたら、この質問を更新します。

関連する問題