Activator.CreateInstance(type) 抛出异常
Activator.CreateInstance(type) Throws Exception
实际上这是一个非常奇怪的异常,因为它只在我将项目构建为 Release 时发生,而当我选择 Debug[= 时根本不会发生26=]。在调试模式下,应用程序运行完美,以下代码运行良好。
下面是我的扩展方法的代码:
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;
}
例外情况是:
An exception of type 'System.MissingMethodException' occurred in
System.Private.Reflection.Execution.dll but was not handled in user
code
Additional information: MissingConstructor_Name,
Windows.UI.Xaml.Controls.RelativePanel. For more information, visit
http://go.microsoft.com/fwlink/?LinkId=623485
我发现了一些与此异常相关的问题,但它们都指向缺少库或更新库,例如 this 但我的应用程序中没有任何更改。
此问题与 UWP 应用的发布版本使用 .NET 本机工具链 有关。在这种模式下 reflection 需要一些提示才能正常工作。显然 RelativePanel
的构造函数不可用于反射。
幸运的是,this blogpost.
中描述了解决此问题的方法
在您的 UWP 项目的 Properties 文件夹中有一个名为 default.rd.xml
的文件。打开它并在 <Applications>
元素内添加以下行:
<Type Name="Windows.UI.Xaml.Controls.RelativePanel"
Dynamic="Required All" Activate="Required All" />
Dynamic
属性应确保反射是可能的,Activate
属性应确保构造函数可用于激活 - 这是您的案例的关键。
这应该包括 RelativePanel
的所有成员以供反思,一切都应该按预期进行。
您可以查看 default.rd.xml
文件结构的更多详细信息 here。
实际上这是一个非常奇怪的异常,因为它只在我将项目构建为 Release 时发生,而当我选择 Debug[= 时根本不会发生26=]。在调试模式下,应用程序运行完美,以下代码运行良好。
下面是我的扩展方法的代码:
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;
}
例外情况是:
An exception of type 'System.MissingMethodException' occurred in System.Private.Reflection.Execution.dll but was not handled in user code
Additional information: MissingConstructor_Name, Windows.UI.Xaml.Controls.RelativePanel. For more information, visit http://go.microsoft.com/fwlink/?LinkId=623485
我发现了一些与此异常相关的问题,但它们都指向缺少库或更新库,例如 this 但我的应用程序中没有任何更改。
此问题与 UWP 应用的发布版本使用 .NET 本机工具链 有关。在这种模式下 reflection 需要一些提示才能正常工作。显然 RelativePanel
的构造函数不可用于反射。
幸运的是,this blogpost.
中描述了解决此问题的方法在您的 UWP 项目的 Properties 文件夹中有一个名为 default.rd.xml
的文件。打开它并在 <Applications>
元素内添加以下行:
<Type Name="Windows.UI.Xaml.Controls.RelativePanel"
Dynamic="Required All" Activate="Required All" />
Dynamic
属性应确保反射是可能的,Activate
属性应确保构造函数可用于激活 - 这是您的案例的关键。
这应该包括 RelativePanel
的所有成员以供反思,一切都应该按预期进行。
您可以查看 default.rd.xml
文件结构的更多详细信息 here。