自定义MarkupExtension仅在设计时导致TypeInitializationException

本文关键字:TypeInitializationException MarkupExtension 自定义 | 更新日期: 2023-09-27 18:17:18

我正在做一个自定义标记扩展,它的作用很简单:

使用系统。在扩展构造函数参数(类型)上激活并实例化它。

 public class MyExtension : MarkupExtension
 {
    private readonly Type _myType;
    public MyExtension (Type param)
    {
        _myType= param;
    }
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Activator.CreateInstance(_myType);
    }
 }

在运行期间,此扩展按预期工作。

但是在设计时,在激活类型时抛出异常。

我已经深入地下寻找源头,并抓住了鲸鱼:

    try
    {
        return Activator.CreateInstance(_myType);
    }
    catch (TypeInitializationException ex)
    {
    }

所以我循环了一下:

 (ex.InnerException as ReflectionTypeLoadException).LoaderExceptions[i].Message);

并检索了以下消息

无法找到Windows运行时类型'Windows. applicationmodel . core . iframeworkview '.

无法找到Windows运行时类型'Windows. applicationmodel . core . iframeworkviewsource '.

由于我的代码在运行时工作正常,我唯一的猜测是VS (2013 update 2 on。net 4.5.1)

或者Xaml设计器只是在错误的程序集中查找。

关于如何解决这个问题,或者其他任何关于这个问题的想法,也许?

非常感谢您的宝贵时间。

自定义MarkupExtension仅在设计时导致TypeInitializationException

我对这个问题进行了深入研究,得出以下结论:

这个问题的唯一解决方案是区分设计时的返回值和运行时的返回值。

这是相当容易做到的,并在我正在开发的WPF框架中实现。

看到PerrypheralFramework

相关的程序集是PerrypheralFramework。WPF,相关的类是:PerrypheralFramework.WPF.MarkupExtensions.Base.DependencyObjectDependantExtensionBase

相关文章:
  • 没有找到相关文章