如何从GAC加载特定版本的程序集
出于测试目的,我喜欢从GAC加载特定版本的DLL程序集。 但是,我的程序总是加载最新版本 – 我认为由策略程序集驱动。
var dll = Assembly.Load("Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"); Console.WriteLine(dll.ToString());
输出:
Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342
即使我以强名称指定版本“4.121.1.0”,它也会加载版本“4.122.1.0”。 有没有办法强制使用特定版本?
来自fuslogvw.exe
中请求的fuslogvw.exe
结果:
*** 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重定向到4.122.1.0。
但我喜欢绕过它。
GAC中安装了4.121.1.0版:
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>
你可能不得不绕过发布者政策。 将应用程序配置文件添加到dependentAssembly
更多信息在这里和这里
- BadImageFormatException无法加载文件或程序集或其依赖项之一。 尝试加载格式不正确的程序
- 无法加载文件或程序集System.Web.WebPages.Deployment
- 将多个图标(Win32-Resource)添加到.NET应用程序
- System.IO.FileNotFoundException:在部署应用程序时无法加载文件或程序集“X”或其中一个依赖项
- 无法加载文件或程序集Microsoft.Win32.Primitives,Version = 4.0.0.0
- 找不到WP 8.1的System.Net.Sockets程序集
- 使用星号时导致Assembly Version递增的原因是什么?
- microsoft.visualbasic.fileio不存在
- 为什么我必须链接参考组件?