emu雑記

C#erな人が書いているブログです。最近、javaを始めました。なんかいろいろやってます。

Visual Studio 2012 Update4→不具合改修されず??→その後…

まずはここ→前回までのあらすじ

さて、Excel方眼紙を送って未改修であることを伝えたその後ですが、マイクロソフトが再度フィードバックのステータスを「終了」に変更しやがった。

しかも、なんの説明もなし。

こっちが送った資料を見たのかどうかも不明。
はぁ?って感じでした。

金払って、プレミアサポートに入れってことなんかなー?
貧乏人はお断りってことなんかなー。


とりあえず愚痴っていても仕方ないので、dotPeekでデコンパイル調査です。

今回の不具合で問題になったのはコレ→SceSearch 2012 extension

簡単にいうと、ソース管理エクスプローラーからのファイル検索です。


ツールでポイントになっているのは
Microsoft.TeamFoundation.VersionControl.Controls.dll内にあるExplorerSccクラスのSelectionChangedイベントです。

こいつにdelegateするタイミングによって、メソッドが割りつかない場合が発生するのが今回の不具合。
(Visual Studio 2010では問題なくて、Visual Studio 2012から発生したから不具合でいいよね?)


このExplorerSccクラスをプロパティとして持っていて、拡張機能としてこちらからアクセスできるのは
Microsoft.VisualStudio.TeamFoundation.VersionControl.dllのVersionControlExplorerExtクラスです。

Visual Studio 2010

private ToolWindowSccExplorer ExplorerToolWindow
{
  set
  {
    .......
    this.m_sceToolWindow = value;
    this.SubscribeExplorerEvents();
  }
}
private void SubscribeExplorerEvents()
{
    .......
  this.m_sceToolWindow.SccExplorer.SelectionChanged += new EventHandler(((VersionControlBaseExt) this).OnSelectionChanged);
}

Visual Studio 2012

private ToolWindowSccExplorer m_sceToolWindow;

private ToolWindowSccExplorer ExplorerToolWindow
{
  set
  {
    .......
    this.m_sceToolWindow = value;
  }
}
private void ToolWindowSccExplorer_Created(object sender, EventArgs e)
{
  .......
  this.SubscribeExplorerEvents(this.ExplorerToolWindow);
}
private void SubscribeExplorerEvents(ToolWindowSccExplorer sccExplorer)
{
    .......
  sccExplorer.SccExplorer.SelectionChanged += new EventHandler(((VersionControlBaseExt) this).OnSelectionChanged);
}

主要な部分しか載せていませんが、
Visual Studio 2010 では、ExplorerToolWindowプロパティにウィンドウをセットするたびにイベントを再登録してくれるんですが、
Visual Studio 2012 では、ToolWindowSccExplorerを作成したタイミングのみSelectionChangedイベントを登録してくれるっぽい。


ここらへんをどうにかすれば、昔と同等の動作を確保できそうです。
ちょっと、調査の日々だな…。