gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:30 25 4
gpt4 key购买 nike

我正在开发自定义标记扩展,其作用很简单:

在扩展构造函数参数(一种类型)上使用 System.Activator 并实例化它。

 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(.NET 4.5.1 上的 2013 更新 2)

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

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

非常感谢您抽出宝贵时间。

最佳答案

我进一步研究了这个问题并得出以下结论:

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

这很容易完成,并且是在我正在开发的 WPF 框架中实现的。

参见 PerrypheralFramework

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

关于c# - 自定义 MarkupExtension 仅在设计时导致 TypeInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25216528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com