The project of U-WA-
http://uwa.potetihouse.com/
トップページ > 過去ログ > 記事閲覧
アイコン 【nandoku】原因不明のエラーのご報告
日時: 2009/05/05 17:28
名前: masa

Nandoku で「原因不明のエラー」となる現象をみつけましたので、情報共有のためご報告します。

スーパークラス内でサブクラスを参照しており、そのサブクラスが難読化対象となる場合、
そのコードを含むアセンブリの難読化時に原因不明のエラーが発生します。

いざ難読化、というときになってエラーとなると見つけるのが大変かもしれません。
エラーの内容がわかる何らかの情報が得られると原因を見つけやすいと思うのですが、
そういった情報をメッセージやログに出すことはできませんでしょうか。


.NET Framework のバージョン:2.0
Nandoku のバージョン:3.2.2

以下、現象が発生したコードです。

public class WeakReference<T> : WeakReference where T : class {

  public static WeakReference<T> Create( T target ) {

    if ( target == null ) {
      // この文が難読化時に「原因不明のエラー」となる模様。
      // スーパークラス内でサブクラスを参照しており(このこと自体問題がありますが;;)、
      // スーパークラスの難読化処理後にサブクラスの難読化処理が行われ、
      // サブクラスの型名が変更されて参照不可となるため?
      // サブクラスを public に変えたり、難読化対象外にすることでエラーは発生しなくなります。
      return WeakNullReference<T>.Default;
    } else {
      return new WeakReference<T>( target );
    }

  }

  internal WeakReference( T target )
    : base( target ) {

  }

  public new T Target {
    get {
      T target = ( T )base.Target;
      return target;
    }
  }

}

internal class WeakNullReference<T> : WeakReference<T> where T : class {

  public readonly static WeakNullReference<T> Default = new WeakNullReference<T>();

  internal WeakNullReference()
    : base( null ) {
  }

  public override bool IsAlive {
    get { return true; }
  }

}

Page: 1 |

ファイル 追記 ( No.1 )
日時: 2009/05/05 17:32
名前: masa

追伸

スーパークラスからサブクラスを参照するのはやっぱり気持ち悪いので、
このコードは修正しています。難読化も問題なくおこなえています。


ファイル Re: 【nandoku】原因不明のエラーのご報告 ( No.2 )
日時: 2009/05/07 21:28
名前: Toki◆pRU.c9X.EOI

不具合報告ありがとうございます。

問題箇所が特定できたので、修正版をULしました。

どうも、
public class WeakReference<T> : WeakReference where T : class
の「class」が原因だったようで、
この中の「T」が難読かされていませんでした。

ファイル Re: 【nandoku】原因不明のエラーのご報告 ( No.3 )
日時: 2009/05/09 10:26
名前: masa

迅速な修正対応、ありがとうございます。

なお、ジェネリック制約の class は他の個所でも使用していますが、
エラーとなったのは報告した1か所のみでした。

Page: 1 |