gpt4 book ai didi

.net - 从 x64 位操作系统上构建的 "Any CPU"应用程序反射 x86 程序集

转载 作者:行者123 更新时间:2023-12-01 23:26:36 24 4
gpt4 key购买 nike

我有一个编译为“任何 CPU”的 .Net 应用程序。我在 x64 操作系统上运行它,因此它以 64 位运行。应用程序加载用户提供的其他程序集。它当然使用反射从用户提供的程序集中读取类型。如果用户程序集被编译为“Any CPU”,则一切正常。但是如果程序集编译为 x86,我会在反射时得到“这不是 Win32 应用程序”异常。这显然是因为主机应用程序运行的是 64 位。

我的问题是,我该如何解决这个问题?有什么想法/想法吗?

谢谢

最佳答案

好的。我想到了。出于我的目的,这只是程序集的简单类型发现但没有实例化,如果程序集是 32 位,则使用 Assembly.ReflectionOnlyLoad 有效。

您使用 Assembly.ReflectionOnlyLoad 加载程序集,您可以反射(reflect)类型。您还应该 Hook 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);
}

关于.net - 从 x64 位操作系统上构建的 "Any CPU"应用程序反射 x86 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/982578/

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