我想运行一些单元测试,直接在 Oracle 数据库中执行一些 SQL 命令,但当单元测试开始时,我遇到了以下异常:
Testmethod1 抛出异常: System.IO.FileNotFoundException: 找不到文件或程序集 'Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342' 或它的某个依赖项。系统无法找到指定的文件。
我已经在项目引用中添加了 Oracle.DataAccess (通过 NuGet 添加),并安装了 Oracle 数据提供程序。
甚至我还有其他一些使用 Oracle.DataAccess 的项目,可以在这台机器上运行而没有问题。似乎只有 Microsoft.Net 单元测试框架 (MSTest) 不能加载该程序集。
下面是 Fusion Log Viewer 中记录的日志:
Testmethod1 抛出异常: System.IO.FileNotFoundException: 找不到文件或程序集 'Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342' 或它的某个依赖项。系统无法找到指定的文件。
我已经在项目引用中添加了 Oracle.DataAccess (通过 NuGet 添加),并安装了 Oracle 数据提供程序。
甚至我还有其他一些使用 Oracle.DataAccess 的项目,可以在这台机器上运行而没有问题。似乎只有 Microsoft.Net 单元测试框架 (MSTest) 不能加载该程序集。
下面是 Fusion Log Viewer 中记录的日志:
*** Assembly Binder Log Entry (23/08/2013 @ 04:50:07 p.m.) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\QTAgent32_40.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = ...
LOG: DisplayName = Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342
(Fully-specified)
LOG: Appbase = file:///...C:/<solution_folder>.../TestResults/.../Out
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = QTAgent32_40.exe
Calling assembly : ...<project_name>..., Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\...<solution_folder>...\TestResults\...\Out\...<project_name>....DLL.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/...<solution_folder>.../TestResults/.../Out/Oracle.DataAccess.DLL.
LOG: Attempting download of new URL file:///C:/...<solution_folder>.../TestResults/.../Out/Oracle.DataAccess/Oracle.DataAccess.DLL.
LOG: Attempting download of new URL file:///C:/...<solution_folder>.../TestResults/.../Out/Oracle.DataAccess.EXE.
LOG: Attempting download of new URL file:///C:/...<solution_folder>.../TestResults/.../Out/Oracle.DataAccess/Oracle.DataAccess.EXE.
LOG: All probing URLs attempted and failed.
它表明在GAC中没有找到程序集,但我已经找到了它:C:\Windows\Microsoft.NET\assembly\GAC_64\Oracle.DataAccess\v4.0_4.112.3.0__89b483f429c47342\Oracle.DataAccess.dll\
值得注意的是上面的日志显示QTAgent32_40.exe
,即使我在Visual Studio菜单中选择了TEST -> Test Settings -> Default Processor Architecture -> X64
。在这之前,我收到了一个BadImageFormatException
。
附加说明:
- 我安装的Oracle数据提供程序是64位版本。
- 引用已经设置为
Copy Local=True
CopyLocal = True
。 - mmutilva