不具合? : new しようとすると TypeLoadException

どこから仕様でどこがバグなのか、まだはっきりとしていないのだが、Community Edition v1.2.1357(日本語/英語)および Professinal Edition v1.2.1357(日本語)では、一部のアセンブリプライベートなクラスや構造体の初期化が Renaming を有効にすると TypeLoadException になってしまった。

// 公開する操作群をまとめるインターフェス
public interface Ixxx
{
  void DoIt();
}

// Ixxx の実装その1
internal sealed class Xxx1 : Ixxx
{
  // 実装
}

// Ixxx の実装その2
internal sealed class Xxx2 : Ixxx
{
  // 実装
}

// Ixxx の実装その3
internal struct Xxx3 : Ixxx
{
  // この部分が .cctor() で実行される時に TypeLoadException
  static readonly Empty = new Xxx3();

  private Xxx3() { this.isEmpty = true; }

  public Xxx3(param...)
  {
    this.isEmpty = false;
     :
  }
}

// 生成をサポートする公開クラス
public class XYZ
{
  Ixxx Create(int n)
  {
    switch (n)
    {
      // こっちは平気
      case 1: return new Xxx1();

      // ここを実行する際に TypeLoadException
      case 2: return new Xxx2(); 
    }
  }
}

ソースコードのイメージは上記のようなかんじで、発生する例外メッセージは

クラス 'Xxx1' の メソッド Aaa は異なる virtual 状態で、メソッドの宣言を実装しようとしました。型 : 'Xxx1'。アセンブリ : 'Aaa'。

という NewSlot Virtual の設定ミスなどで発生するもの。(当然、この例外メッセージ中のクラス名は難読化されたものになっている)バージョンをあげると問題が発生しなくなるため v1.2.1357 の不具合ではないかと考えられる。