9

アプリケーションが開始されたら、今後のすべてのアセンブリの読み込みに適用されるバインディング リダイレクトを作成する方法はありますか?

4

2 に答える 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 レベルのインターフェイスであるため、個々の AppDomains のポリシーを読み込むことはできません (これが PostSharp でまだ使用されていない理由です)。

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

于 2012-02-20T08:14:52.543 に答える