2

WeakReference を継承するクラス WeakRef があります。このクラスは、元々、標準の .NET フレームワークを対象とする名前空間の一部でした。最近、.NET 4.5 に移行し、Portable Class Library を利用することにしました。WeakRef を含めましたが、Silverlight アプリケーションでそれを参照すると、次のランタイム例外が発生しました。

  • $exception {System.TypeInitializationException: 'AxisModel.ImageDownloadAlert' の型初期化子が例外をスローしました。---> System.TypeLoadException: タイプ 'Common.WeakRef`1' によって違反された継承セキュリティ ルール。派生型は、基本型のセキュリティ アクセシビリティと一致するか、アクセスしにくくする必要があります。基本クラスに非透過的な既定のコンストラクターがある場合、派生クラスにも既定のコンストラクターが必要であり、メソッドの継承規則はこれら 2 つのメソッドに適用されます。

    Common.WeakRefCallbackHostCore`1..ctor(Object syncRoot)
    で AxisModel.ImageDownloadAlert..ctor()
    で AxisModel.ImageDownloadAlert..cctor() で

    --- 内部例外スタック トレースの終了 ---
    AxisModel.ImageDownloadAlert.get_Instance()
    で SLWebApp.App..ctor()}

    System.Exception {System.TypeInitializationException}

WeakReference の Silverlight バージョンには空のデフォルト コンストラクターがあることに気付きましたが、これは WeakReference の標準 .NET バージョンには当てはまりません。WeakRef には空のコンストラクターが含まれていないため、これがスローされた例外の理由だと思います。問題は、このクラスに空のコンストラクターを追加すると、WPF アプリケーションでコンパイル エラーが発生することです。

実行時エラーやコンパイル エラーを発生させることなく、Silverlight アプリケーションと WPF アプリケーションの間で WeakRef を共有する方法はありますか? 低侵襲のソリューションを探しています。

アップデート:

Silverlight での WeakReference の継承に関して、いくつかの議論がありました。どうやらそれは不可能なので、代わりに WeakReference インスタンスを含むクラスを作成する必要があります。ただし、WeakReference が含まれているかどうかに関係なく、Silverlight 定義には空の既定のコンストラクターがあり、.NET Framework 定義には含まれていないという点で、WeakReference に似たクラスから継承することは可能でしょうか?

ディスカッションは次の場所にあります。

Silverlight で ReflectionTypeLoadException をスローする継承された WeakReference

4

1 に答える 1

1

これの再現は何ですか?まさにこの理由から、Visual Studio 2012 の RTM ビットでは WeakReference の既定のコンストラクターを公開していません。どのビルドを使用していますか?

于 2012-09-12T21:19:23.743 に答える