• 只有ReflectionOnlyLoadFrom才可以拯救与GAC冲突的强命名程序集


    先说结论,如果有两个拥有相同程序集名称的强命名程序集,一个在GAC里,一个不在。怎样动态加载那个不在GAC里的程序集?答案就是只有Assembly.ReflectionOnlyLoadFrom才可以加载这个程序集,

    比如我们把system.dll文件拷贝到D盘(注意应用程序域默认会加载mscorlib.dll,而不是system.dll)。然后试试用下面的方法:

    var path = @"D:system.dll";
    
    //Load(byte[])
    Assembly.Load(File.ReadAllBytes(path));
    //LoadFrom(string)
    Assembly.LoadFrom(path);
    //LoadFile(string)
    Assembly.LoadFile(path);

    foreach (var ass in AppDomain.CurrentDomain.GetAssemblies())
         {
              Console.WriteLine(ass.Location);
           }
     

    输出中将会有.NET Framework GAC中的system.dll,而不是我们在D盘的system.dll

    C:WindowsMicrosoft.NetassemblyGAC_MSILSystem.Net版本System.dll

    好吧,只有ReflectionOnlyLoadFrom才可以最后使用这个文件。

       var path = @"D:system.dll";
       //ReflectionOnlyLoadFrom(string)
       Assembly.ReflectionOnlyLoadFrom(path);
       //注意用AppDomain.ReflectionOnlyGetAssemblies()
    foreach (var ass in AppDomain.CurrentDomain.GetAssemblies())
         {
              Console.WriteLine(ass.Location);
           }

    输出:

    D:system.dll
  • 相关阅读:
    tps吞吐量映射的问题
    深浅拷贝
    webdriver驱动火狐浏览器报错:Unable to find a matching set of capabilities
    xpath元素定位方法
    linux监控系统性能命令
    测试质量评估
    测试策略模型设计
    需求评审
    安全测试的目的,发现哪些问题
    url组成
  • 原文地址:https://www.cnblogs.com/yxhblog/p/7363222.html
Copyright © 2020-2023  润新知