2

我们有一个类 WeakRef,它继承自 WeakReference。此类最初是针对标准 .NET 框架的命名空间的一部分。最近,我们迁移到 .NET 4.5 并决定使用可移植类库。我们包含了 WeakRef,但在 Silverlight 应用程序中引用它会导致以下运行时异常:

  • $exception {System.TypeInitializationException: 'AxisModel.ImageDownloadAlert' 的类型初始化程序引发了异常。---> System.TypeLoadException:类型违反了继承安全规则:'Common.WeakRef`1'。派生类型必须要么与基类型的安全可访问性相匹配,要么难以访问。如果基类具有不透明的默认构造函数,则派生类也必须具有默认构造函数,并且方法继承规则适用于这两个方法。

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

    --- 内部异常堆栈跟踪结束 ---
    在 SLWebApp.App..ctor()
    的 AxisModel.ImageDownloadAlert.get_Instance()}

    System.Exception {System.TypeInitializationException}

我注意到 Silverlight 版本的 WeakReference 有一个空的默认构造函数,而标准 .NET 版本的 WeakReference 则不是这种情况。我认为这是引发异常的原因,因为 WeakRef 不包含空构造函数。问题是向此类添加空构造函数会导致我们的 WPF 应用程序出现编译错误。

有没有办法在我们的 Silverlight 和 WPF 应用程序之间共享 WeakRef 而不会导致运行时和编译错误?我正在寻找微创解决方案。

更新:

已经有一些关于在 Silverlight 中继承 WeakReference 的讨论。显然,这是不可能的,因此必须创建一个包含 WeakReference 实例的类。但是,无论是否涉及 WeakReference,是否可以从类似于 WeakReference 的类继承,因为它的 Silverlight 定义有一个空的默认构造函数,而它的 .NET Framework 定义没有?

讨论可以在这里找到:

继承的 WeakReference 在 Silverlight 中抛出 ReflectionTypeLoadException

4

1 回答 1

1

什么是复制品?出于这个原因,我们不会在 Visual Studio 2012 的 RTM 位中公开 WeakReference 的默认构造函数。你用的是什么版本?

于 2012-09-12T21:19:23.743 回答