OITA: Oika's Information Technological Activities

@oika 情報技術的活動日誌。

Componentを継承した.csクラスファイルをVisualStudioで開くとデザイナで開こうとしてエラーになる

DBアクセス関係のクラスをテスト時にモックに差し替えたくて
ADO.NET周りのクラスのモックを作っていたんですが、
ただの.csファイルなのに、ソリューションエクスプローラーから開こうとしたら
デザイナで開こうとしてエラーになる現象に悩まされた。

Visual Studioのエラー画面

↑こんな画面。
右のソリューションエクスプローラーを見ると
普通のクラスファイルと違うアイコンになっているのがわかる。

なんだこれはと思って.csprojをのぞいてみると

<ItemGroup>  
  <Compile Include="MockConnection.cs">  
    <SubType>Component</SubType>  
  </Compile>  
  <Compile Include="MockDataReader.cs" />  
  <Compile Include="MockTransaction.cs" />  
  <Compile Include="Properties\AssemblyInfo.cs" />  
</ItemGroup>  

このSubType=Componentとなっているのが問題のクラスだ。

このクラスで継承してるDbConnectionクラスがComponentのサブクラスなので
そういうこと?って思ったものの、解決策がわからず。
一応右クリック>コードの表示で開けるには開けるんだけども、
なんかじゃまくさいなぁと思っていた。

そんでググったら、StackOverflowで↓の情報を発見。
VS 2010 setting non-GUI class file as Component

見事に対処方法が書いてあって、
クラスの属性を以下のようにつけることで解決した。

[System.ComponentModel.DesignerCategory("Code")]  
class MockConnection : DbConnection   
{  
    ...  
}  

上記の回答者も書いてくれているんだけど、謎なことに
属性の「System.ComponentModel」をusingに入れて省略して書いてしまうと
解決しない。
VisualStudioはusing無視しますよ、だそうだ。まじか。