Naz*_*eeh 3 .net reflection 64-bit 32-bit
我有一个编译为"任何CPU"的.Net应用程序.我在x64操作系统上运行它,因此它以64位运行.应用程序加载用户提供的其他程序集.它当然使用反射来从用户提供的程序集中读取类型.如果用户程序集编译为"任何CPU",一切正常.但是如果程序集被编译为x86,我会在反射时得到"这不是Win32应用程序"异常.这显然是因为主机应用程序运行64位.
我的问题是,我该如何解决这个问题?有什么想法/想法吗?
谢谢
好.我想到了.对于我的目的,这只是程序集的简单类型发现但没有实例化,如果程序集是32位,则使用Assembly.ReflectionOnlyLoad.
使用Assembly.ReflectionOnlyLoad加载程序集,您可以反映类型.您也应该挂钩到AppDomain.CurrentDomain.ReflectionOnlyLoadResolve.
要获取属性名称,您需要在类型,方法或模块上使用CustomAttributeData.GetCustomAttributes.
static void Main(string[] args)
{
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
Assembly assm = Assembly.ReflectionOnlyLoadFrom("TestProject1.dll");
Type t = assm.GetType("TestProject1.ProgramTest");
MethodInfo m = t.GetMethod("MainTest");
IList<CustomAttributeData> data = CustomAttributeData.GetCustomAttributes(t);
}
static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
return Assembly.ReflectionOnlyLoad(args.Name);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1581 次 |
| 最近记录: |