作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个编译为“任何 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/
我是一名优秀的程序员,十分优秀!