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

.net 是否可以在运行时创建绑定重定向?,.net,assembly-resolution,.net,Assembly Resolution,一旦应用程序启动,是否有方法创建将应用于所有未来程序集加载的绑定重定向?可以使用ICLRHostBindingPolicyManager::ModifyApplicationPolicy,但我自己从未尝试过。请注意,这是一个CLR级别的接口,因此您无法为单个AppDomain加载策略(这就是PostSharp尚未使用它的原因) 很抱歉回复了一篇旧帖子,但这个博客对这个问题有了更好的答案。希望有人觉得有用 我的用例:从经典ASP应用程序调用的COM互操作程序集执行绑定重定向 该职位的功能将满足您

一旦应用程序启动,是否有方法创建将应用于所有未来程序集加载的绑定重定向?

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


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

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

该职位的功能将满足您的需求:

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;
}

你为什么需要这个?你想达到什么目的?你所说的所有未来的任务是什么意思?@darin。那是“我不知道”吗?这是一个相当复杂的情况,不值得在这里解释。@František程序集加载到domand上。所以我想控制在程序生命周期内加载程序集时的绑定application@Simon:您是否可以使用AppDomain.AssemblyResolve事件来解决此问题?