问题描述
原有程序使用了ICSharpCode.SharpZipLib.dll的0.81.0.1047版本现有制作的外挂程序使用了ICSharpCode.SharpZipLib.dll的0.84版本怎么处理原有程序只能用0.81.0.1047版本的而且外挂程序只能放在原程序的目录下面
解决方案
解决方案二:
把新的ICSharpCode.SharpZipLib.dllcopy到主程序目录,换个名字,比如ICSharpCode.SharpZipLib_new.dll。在外挂程序最早被主程序使用的类的静态构造方法里加:AppDomain.CurrentDomain.AssemblyResolve+=(sender,eventArgs)=>{varname=newAssemblyName(eventArgs.Name);if(name.Name=="ICSharpCode.SharpZipLib"&&name.Version==newVersion(0,84,0,0))returnAssembly.LoadFrom(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"ICSharpCode.SharpZipLib_new.dll"));returnnull;};
解决方案三:
引用1楼github_22161131的回复:
把新的ICSharpCode.SharpZipLib.dllcopy到主程序目录,换个名字,比如ICSharpCode.SharpZipLib_new.dll。在外挂程序最早被主程序使用的类的静态构造方法里加:AppDomain.CurrentDomain.AssemblyResolve+=(sender,eventArgs)=>{varname=newAssemblyName(eventArgs.Name);if(name.Name=="ICSharpCode.SharpZipLib"&&name.Version==newVersion(0,84,0,0))returnAssembly.LoadFrom(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"ICSharpCode.SharpZipLib_new.dll"));returnnull;};
这个怎么理解?
解决方案四:
主程序加载外挂程序的时候,是要创建外挂程序中一个类的实例,然后调用上面的方法吧。相当于外挂程序被调用的入口点的那个类。因为那段AssemblyResolve的代码必须要尽早执行,在用到SharpZipLib之前。所以就找最早被主程序使用的类,它上面的静态构造会最先执行,放那里比较安全。
时间: 2024-10-11 23:04:48