Dot-Net

是否可以在執行時創建綁定重定向?

  • September 21, 2015

應用程序啟動後,是否有辦法創建將應用於所有未來程序集載入的綁定重定向?

可以使用ICLRHostBindingPolicyManager ::ModifyApplicationPolicy,但我自己從未嘗試過。請注意,這是一個 CLR 級別的介面,因此您不能為單個 AppDomain 載入策略(這就是 PostSharp 尚未使用它的原因)。

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

很抱歉回復了一篇舊文章,但這個部落格對這個問題有一個更好的答案。希望有人覺得它有用。

我的案例:從由經典 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;
}

引用自:https://stackoverflow.com/questions/5646306