代码之家  ›  专栏  ›  技术社区  ›  code4life

注册服务.RegisterAssembly错误-救命!

  •  4
  • code4life  · 技术社区  · 15 年前

    我在共享文件夹上有一个程序集(仅限UNC路径,没有映射驱动器)。当我试图通过 RegistrationServices

    using System;
    using System.IO;
    using System.Reflection;
    using System.Runtime.InteropServices;
    
    namespace BLRegisterAssembly
    {
        public static class BlRegisterAssembly
        {
            public static void Register()
            {
                var asm = Assembly.LoadFile(@"\\myUNCPath\myAssembly.dll");
                var rs = new RegistrationServices();
                rs.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase);
                // I've also tried AssemblyRegistrationFlags.None : same error.
            }
        }
    }
    

    “无法加载文件或程序集 它的依赖关系之一。系统

    (相关文件是主程序集使用的引用程序集)。

    还有几点:

    -文件夹 不能

    回答
    因为我在用 Assembly.LoadFile ,依赖程序集必须通过 AssemblyResolve . 以下代码更新修复了我的问题:

    public void Register()
    {
        AppDomain.CurrentDomain.AssemblyResolve += 
          new ResolveEventHandler(CurrentDomain_AssemblyResolve);
    
        var asm = Assembly.LoadFile(Path.Combine(m_path, assemblyName));
        var rs = new RegistrationServices();
        rs.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase);
    }
    
    static Assembly CurrentDomain_AssemblyResolve(object sender, 
      ResolveEventArgs args)
    {
        //... code to resolve the path and load the dependent assembly...
    }
    
    1 回复  |  直到 15 年前
        1
  •  4
  •   Hans Passant    15 年前

    不应使用LoadFile(),而应使用LoadFrom(),这样CLR就有机会找到任何依赖程序集。如果你仍然有困难,那么使用Fuslogvw.exe以获取程序集解析尝试的跟踪。备份计划是AppDomain.AssemblyResolve.