开发工具:VS2017
问题:Assembly.Load("Oracle.ManagedDataAccess")出错
System.IO.FileNotFoundException: Could not load file or assembly 'Oracle.ManagedDataAccess, Culture=neutral, PublicKeyToken=null'. 系统找不到指定的文件。
File name: 'Oracle.ManagedDataAccess, Culture=neutral, PublicKeyToken=null'
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, StackCrawlMark& stackMark, IntPtr pPrivHostBinder)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, StackCrawlMark& stackMark)
at System.Reflection.Assembly.Load(String assemblyString)
解决方式:
找到Web工程bin文件夹下的“项目名称.deps.json”文件,添加Oracle.ManagedDataAccess.dll的相关引用
"Oracle.ManagedDataAccess.Core/2.19.70": {
"runtime": {
"lib/netstandard2.0/Oracle.ManagedDataAccess.dll": {
"assemblyVersion": "2.0.19.1",
"fileVersion": "2.0.19.1"
}
},
"compile": {
"lib/netstandard2.0/Oracle.ManagedDataAccess.dll": {}
}
}
所在项目的引用,本文项目名称DBUtility
"DBUtility/1.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "2.1.1",
"Microsoft.Extensions.Configuration.Json": "2.1.1",
"Oracle.ManagedDataAccess.Core": "2.19.70"
}
"Oracle.ManagedDataAccess.Core/2.19.70": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bpsnNrSc/dtKx5KSrnG1CTYlAzNzWV0BVmb5HbcPDgMY5FfGLKi5W96e7UHtSq6vniKIt7ptTie9uWGUqOyj4A==",
"path": "oracle.manageddataaccess.core/2.19.70",
"hashPath": "oracle.manageddataaccess.core.2.19.70.nupkg.sha512"
}
如果不清楚这些引用的具体信息呢,可以通过NuGet安装这个DLL,安装后“项目名称.deps.json”这个文件中会自动加入引用信息。另外通过NuGet安装后,执行Assembly.Load("Oracle.ManagedDataAccess.Client")执行是不出错的。如果不想通过NuGet引用,只想使用时调用Oracle.ManagedDataAccess.dll,就像本文这种情况,就可以采用先通过NuGet引用,没问题后备份“项目名称.deps.json”这个文件,然后把NuGet引用去掉,再使用备份好的项目名称.deps.json,Assembly.Load("Oracle.ManagedDataAccess.Client")就不会出错了,加载成功后
通过快速监视也能看到被加载文件的位置。
有没有其它更好的解决方式,还需要更多了解netcore