zoukankan      html  css  js  c++  java
  • 只有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
  • 相关阅读:
    百度图片
    在线人数统计
    mysql简易导入excel
    asp.net 导出excel带图片
    C# 正则验证
    js生成随机数
    YQL获取天气
    取html里的img和去html标签
    客户端信息获得《转》
    使用ASP.NET上传图片汇总
  • 原文地址:https://www.cnblogs.com/yxhblog/p/7363222.html
Copyright © 2011-2022 走看看