2017-06-29 20 views
1

テストの目的で、GACから特定のバージョンのDLLアセンブリをロードするのが好きです。しかし、私のプログラムは常に最新のバージョンを読み込んでいます。私はポリシーアセンブリによって動かされると思います。GACから特定のバージョンのアセンブリをロードする方法

var dll = Assembly.Load("Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"); 
Console.WriteLine(dll.ToString()); 

出力:私はそれが "4.122.1.0" バージョンをロードし、厳密な名前でバージョン "4.121.1.0" を指定

Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342 

にもかかわらず。特定のバージョンを強制する方法はありますか? fuslogvw.exeから

結果コメントで要求されるように:4.121.1.0は4.122.1.0にリダイレクト:

*** Assembly Binder Log Entry (29.06.2017 @ 11:24:15) *** 

The operation was successful. 
Bind result: hr = 0x0. The operation completed successfully. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 
Running under executable C:\Programs\Tools\ConnectionTester_x64.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: DisplayName = Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342 
(Fully-specified) 
LOG: Appbase = file:///C:/Programs/Tools/ 
LOG: Initial PrivatePath = NULL 
LOG: Dynamic Base = NULL 
LOG: Cache Base = NULL 
LOG: AppName = ConnectionTester_x64.exe 
Calling assembly : ConnectionTester_x64, Version=1.0.353.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: No application configuration file found. 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. 
LOG: Publisher policy file is found at C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Policy.4.121.Oracle.ManagedDataAccess\v4.0_4.122.1.0__89b483f429c47342\Policy.4.121.Oracle.ManagedDataAccess.config. 
LOG: Publisher policy file redirect is found: 4.121.1.0 redirected to 4.122.1.0. 
LOG: ProcessorArchitecture is locked to MSIL. 
LOG: Post-policy reference: Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL 
LOG: Found assembly by looking in the GAC. 
LOG: Binding succeeds. Returns assembly from C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Oracle.ManagedDataAccess\v4.0_4.122.1.0__89b483f429c47342\Oracle.ManagedDataAccess.dll. 
LOG: Assembly is loaded in default load context. 

予想通りそれは

発行者ポリシーファイルリダイレクトが発見されたと言って、見えます。

しかし、私はそれをバイパスしたい。

バージョン4.121.1.0はGACにインストールされます。

C:\Program Files (x86)\Microsoft Visual Studio 11.0>gacutil /l Oracle.ManagedDataAccess 
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020 
Copyright (c) Microsoft Corporation. All rights reserved. 

The Global Assembly Cache contains the following assemblies: 
    Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL 
    Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL 
    Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL 

Number of items = 3 

C:\Program Files (x86)\Microsoft Visual Studio 11.0> 
+0

使用Fuslogvw.exeではに、アプリケーションの設定ファイルに追加します。あなたの質問にトレースを表示してください。 –

+0

@HansPassant、ログを追加 –

答えて

0

あなたはおそらく、発行者ポリシーをバイパスする必要があります。 すべてのバインドをログに記録し、dependentAssembly

<publisherPolicy apply="no" /> 

詳細herehere

+0

''は動作していますが、 ' false 'を設定しても何も変更されませんでした。 –

関連する問題