实际上这是一个非常奇怪的异常,因为只有当我将项目构建为发布时才会发生,并且当我选择调试时根本不会发生。在调试模式下,应用程序运行良好,以下代码运行良好。
以下是我的扩展程序代码:
public static T DeepClone<T>(this T source) where T : UIElement
{
T result;
// Get the type
Type type = source.GetType();
// Create an instance
result = Activator.CreateInstance(type) as T; //throws exception here only if I build project as (release)
CopyProperties<T>(source, result, type);
DeepCopyChildren<T>(source, result);
return result;
}
例外情况是:
类型&#39; System.MissingMethodException&#39;的例外情况发生在 System.Private.Reflection.Execution.dll但未在用户中处理 代码
其他信息:MissingConstructor_Name, Windows.UI.Xaml.Controls.RelativePanel。有关更多信息,请访问 http://go.microsoft.com/fwlink/?LinkId=623485
我发现了一些与此异常相关的问题,但它们都指向缺少的库或更新库,例如this,但我的应用中没有任何更改。
答案 0 :(得分:6)
此问题与UWP应用的发布版本使用 .NET本机工具链这一事实有关。在此模式下,反射需要一些提示才能正常工作。显然RelativePanel
的构造函数不可用于反射。
幸运的是,this blogpost中描述了一种解决方法。
在您的UWP项目的属性文件夹中有一个名为default.rd.xml
的文件。打开它并在<Applications>
元素中添加以下行:
<Type Name="Windows.UI.Xaml.Controls.RelativePanel"
Dynamic="Required All" Activate="Required All" />
Dynamic
属性应确保可以进行反射,Activate
属性应确保构造函数可用于激活 - 这对您的案例至关重要。
这应该包括RelativePanel
的所有成员进行反思,一切都应该按预期工作。
您可以在default.rd.xml
文件结构here上看到更多详细信息。