繁体   English   中英

是否可以在运行时创建绑定重定向?

[英]Is it possible to create a binding redirect at runtime?

应用程序启动后是否有一种方法可以创建适用于所有未来装配负载的绑定重定向?

很抱歉回复了一个旧帖子,但是这个博客对这个问题有了更好的答案。 希望有人发现它有用。

我的用例:从经典ASP应用程序调用的COM互操作程序集进行绑定重定向。

http://blog.slaks.net/2013-12-25/redirecting-assembly-loads-at-runtime/

来自相关帖子的此功能将执行您想要的操作:

public static void RedirectAssembly(string shortName, Version targetVersion, string publicKeyToken) {
    ResolveEventHandler handler = null;

    handler = (sender, args) => {
        // Use latest strong name & version when trying to load SDK assemblies
        var requestedAssembly = new AssemblyName(args.Name);
        if (requestedAssembly.Name != shortName)
            return null;

        Debug.WriteLine("Redirecting assembly load of " + args.Name
                      + ",\tloaded by " + (args.RequestingAssembly == null ? "(unknown)" : args.RequestingAssembly.FullName));

        requestedAssembly.Version = targetVersion;
        requestedAssembly.SetPublicKeyToken(new AssemblyName("x, PublicKeyToken=" + publicKeyToken).GetPublicKeyToken());
        requestedAssembly.CultureInfo = CultureInfo.InvariantCulture;

        AppDomain.CurrentDomain.AssemblyResolve -= handler;

        return Assembly.Load(requestedAssembly);
    };
    AppDomain.CurrentDomain.AssemblyResolve += handler;
}

可能是可能使用ICLRHostBindingPolicyManager :: ModifyApplicationPolicy,但我从来没有尝试过自己。 请注意,这是一个CLR级别的接口,因此您无法加载单个AppDomain的策略(这就是PostSharp尚未使用它的原因)。

http://msdn.microsoft.com/en-us/library/ms164378.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM