应用程序启动后,是否有办法创建将应用于所有未来程序集加载的绑定重定向?
问问题
2039 次
2 回答
10
很抱歉回复了一篇旧帖子,但这个博客对这个问题有一个更好的答案。希望有人觉得它有用。
我的用例:从由经典 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;
}
于 2015-09-21T14:53:43.690 回答
2
可以使用ICLRHostBindingPolicyManager ::ModifyApplicationPolicy,但我自己从未尝试过。请注意,这是一个 CLR 级别的接口,因此您不能为单个 AppDomain 加载策略(这就是 PostSharp 尚未使用它的原因)。
于 2012-02-20T08:14:52.543 回答