How to add folder to assembly search path at runtime in .NET?

前端 未结 8 2217
慢半拍i
慢半拍i 2020-11-22 07:08

My DLLs are loaded by a third-party application, which we can not customize. My assemblies have to be located in their own folder. I can not put them into GAC (my applicatio

8条回答
  •  星月不相逢
    2020-11-22 07:46

    I've used @Mattias S' solution. If you actually want to resolve dependencies from the same folder - you should try using Requesting assembly location, as shown below. args.RequestingAssembly should be checked for nullity.

    System.AppDomain.CurrentDomain.AssemblyResolve += (s, args) =>
    {
        var loadedAssembly = System.AppDomain.CurrentDomain.GetAssemblies().Where(a => a.FullName == args.Name).FirstOrDefault();
        if(loadedAssembly != null)
        {
            return loadedAssembly;
        }
    
        if (args.RequestingAssembly == null) return null;
    
        string folderPath = Path.GetDirectoryName(args.RequestingAssembly.Location);
        string rawAssemblyPath = Path.Combine(folderPath, new System.Reflection.AssemblyName(args.Name).Name);
    
        string assemblyPath = rawAssemblyPath + ".dll";
    
        if (!File.Exists(assemblyPath))
        {
            assemblyPath = rawAssemblyPath + ".exe";
            if (!File.Exists(assemblyPath)) return null;
        } 
    
        var assembly = System.Reflection.Assembly.LoadFrom(assemblyPath);
        return assembly;
     };
    

提交回复
热议问题