.Net Native 中的反射和激活
Reflection and Activation in .Net Native
我在 UWP 应用程序中有以下代码,它在调试模式下运行良好,但在 Release/.Net Native 中编译时抛出异常。
var type = typeof(IHashCommand);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.Where(x => type.IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract);
抛出的异常是:
System.TypeLoadException: 'The type
'System.Runtime.InteropServices.Marshallers.BaseMarshaller' cannot be
found in assembly 'System.Private.Interop, Version=999.999.999.999,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.'
我尝试编辑 "Default.rd.xml" 文件,并根据我发现的一些文档添加了一个命名空间节点(它不起作用或者我没有正确设置它)。
<Namespace Name="MudLib.HashCommands" Activate="Required All" Dynamic="Required All" Browse="Required All" />
实际上,我正在尝试做的是反映该命名空间中实现 IHashCommand 接口的所有 类,然后激活它们。
有人知道我缺少什么或有任何方向吗?
问题是 .Net Native
包含一个程序集。程序集的名称以 Hidden 开头。排除那个程序集就可以了。
var searchForType = typeof(IHashCommand);
var types = AppDomain.CurrentDomain.GetAssemblies()
.Where(assembly => !assembly.FullName.Contains("Hidden") && !assembly.FullName.Contains("Private"))
.SelectMany(assembly => assembly.GetTypes())
.Where(type => !type.IsInterface && !type.IsAbstract && searchForType.IsAssignableFrom(type));
我在 UWP 应用程序中有以下代码,它在调试模式下运行良好,但在 Release/.Net Native 中编译时抛出异常。
var type = typeof(IHashCommand);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.Where(x => type.IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract);
抛出的异常是:
System.TypeLoadException: 'The type 'System.Runtime.InteropServices.Marshallers.BaseMarshaller' cannot be found in assembly 'System.Private.Interop, Version=999.999.999.999, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.'
我尝试编辑 "Default.rd.xml" 文件,并根据我发现的一些文档添加了一个命名空间节点(它不起作用或者我没有正确设置它)。
<Namespace Name="MudLib.HashCommands" Activate="Required All" Dynamic="Required All" Browse="Required All" />
实际上,我正在尝试做的是反映该命名空间中实现 IHashCommand 接口的所有 类,然后激活它们。
有人知道我缺少什么或有任何方向吗?
问题是 .Net Native
包含一个程序集。程序集的名称以 Hidden 开头。排除那个程序集就可以了。
var searchForType = typeof(IHashCommand);
var types = AppDomain.CurrentDomain.GetAssemblies()
.Where(assembly => !assembly.FullName.Contains("Hidden") && !assembly.FullName.Contains("Private"))
.SelectMany(assembly => assembly.GetTypes())
.Where(type => !type.IsInterface && !type.IsAbstract && searchForType.IsAssignableFrom(type));