gpt4 book ai didi

c# - 在 ReflectionOnlyLoad 期间忽略缺失的依赖项

转载 作者:可可西里 更新时间:2023-11-01 03:02:02 25 4
gpt4 key购买 nike

我正在开发一个简单的类浏览器对话框,允许用户打开一个程序集并从中选择一个静态方法。但是,在某些情况下程序集的依赖项会丢失。

因为我只需要方法名而不是它的完整原型(prototype),有什么方法可以绕过调用 Assembly.ReflectionOnlyLoadFrom 时引发的 FileNotFoundException 吗? ?我目前正在处理 AppDomain.ReflectionOnlyAssemblyResolve但是如果我返回 null,那么我会收到一个 FileLoadException 并显示以下消息:

Cannot resolve dependency to assembly '...' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.

我知道这一定是可能的,因为 .NET Reflector允许您跳过 Unresolved 依赖项。但是,我开始认为 Reflector 可能会手动解析程序集,而不是将其加载到 CLR 中并使用标准反射。也许它使用类似 Cecil 的东西来自 Mono 项目。

最佳答案

这将忽略您缺少的依赖项:

        static void Main(string[] args)
{
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
Assembly assembly = Assembly.ReflectionOnlyLoad("foo");
foreach (Type t in assembly.GetTypes())
{
Console.WriteLine(t.FullName);
}
}

static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}

关于c# - 在 ReflectionOnlyLoad 期间忽略缺失的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339281/

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