gpt4 book ai didi

c# - 带有路径和完整程序集名称的 Assembly.LoadFrom

转载 作者:太空狗 更新时间:2023-10-29 19:44:18 37 4
gpt4 key购买 nike

我正在尝试根据 Environment.Is64BitProcess 实现某些程序集的动态加载。
这基本上是这样工作的:

  • AppDomain.AssemblyResolve event 注册一个事件处理程序
  • 在事件处理程序中,从依赖于 CPU 类型的子路径加载程序集:

    private Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
    {
    // args.Name is the display name of an assembly, e.g.:
    // MyAssembly, Version=5.0.0.0, Culture=neutral, PublicKeyToken=abcdefghijklmn
    if(!args.Name.Contains("MyAssembly"))
    return null;

    var path = Path.Combine(GetCpuTypeDependentPath(), "MyAssembly.dll");
    return Assembly.LoadFrom(path);
    }

现在,这有一个问题,它不检查加载程序集的版本、publicKeyToken 等。
我现在想做的是调用 Assembly.Load 并简单地提供一个额外的探测路径。我知道这不起作用,因为没有这样的过载。有没有其他方法可以实现我的目标?

最佳答案

只需将您找到的程序集的属性与请求的程序集进行比较即可。例如,版本检查可能如下所示:

private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) {
var name = new AssemblyName(args.Name);
string path = System.IO.Path.Combine(IntPtr.Size == 8 ? "x64" : "x86", name.Name + ".dll");
path = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), path);
var asm = Assembly.LoadFrom(path);
var found = new AssemblyName(asm.FullName);
if (name.Version != found.Version) throw new System.IO.FileNotFoundException(name.FullName);
return asm;
}

关于c# - 带有路径和完整程序集名称的 Assembly.LoadFrom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11848005/

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