Dll重定向无法在C#中使用点本地文件(appname.exe.local)来处理dll-hell

时间:2011-08-15 15:54:21

标签: c# redirect local dll

我以前通过在包含新版本应用程序的文件夹中创建零字节application_name.exe.local文件,成功测试多个版本的代码,而不必担心dll依赖性。但是,我们必须转向C#,这种技术不再有效。是否还需要其他东西(除了.local文件)以确保C#dll首先查看当前文件夹然后在应用程序的默认位置追逐其他dll?

1 个答案:

答案 0 :(得分:0)

您可以随时挂接到Tejs建议的AppDomain.AssemblyResolve事件:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

...

public static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    Assembly AlreadyLoaded=AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.FullName == args.Name);
    if(AlreadyLoaded==null)
        return Assembly.LoadFile(Path to corresponding DLL);
}

它并不完美(可能需要在您要搜索的任何目录中加载DLL,然后用搜索这些DLL替换Assembly.LoadFile行),但您应该能够修改它以使其工作。希望无论如何。