c#解决dll调用的问题

 在做一个c#中间程序时,调用第三方的dll安装路径“Program Files” 和“Program Files (x86)”的问题,经过一段时间的研究,找到了下面的解决方案:

思路:

  1.配置dll的加载路径

  2.监控dll

  3.dll加载失败判断操作系统位数(x86、x64)

  4.动态加载dll

 

解决方案:

1.在config中添加dll引用配置:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="{dll name}" publicKeyToken="{ dll token}" culture="neutral"/>
        <codeBase version="{版本}" href="{dll file path}"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

2.在程序入口处注册dll引用失败的事件

static void Main(string[] args)
{
    System.AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}

private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
}

3.实现引用失败的dll的重新加载

private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            System.Reflection.AssemblyName name = new System.Reflection.AssemblyName(args.Name);
            if (name.Name == "{you dll name}")
            {
                if (Win32Native.Is64BitOperatingSystem)
                {
                    if (System.IO.File.Exists(@"{your dll file path}"))
                    {
                        return System.Reflection.Assembly.LoadFile(@"your dll file path");
                    }
                }
                else
                {
                    if (System.IO.File.Exists(@"your dll file path"))
                    {
                        return System.Reflection.Assembly.LoadFile(@"your dll file path");
                    }
                }
            }
            return null;
        }

注意:Is64BitOperatingSystem是用来判断操作系统的位数. .net4.0及以上有直接判断方法可以调用,需要通用的方法可以参考 http://www.cnblogs.com/zp900704/p/7553939.html

转载于:https://www.cnblogs.com/zp900704/p/7560470.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值