我按照这里的指示:http://splinter.com.au/blog/?p=156试图在不安装Oracle 11g客户端的情况下使用更新版本的ODP.NET。到目前为止,除了重新启动IIS之外,我都遵循了所有内容。
然而,这引起了一些问题,我真的很好奇为什么。如果我尝试使用ODP.NET,我遇到了Oracle连接尝试连接时抛出的空白异常(例如ConnectExample.Open())。
但最奇怪的是:我无法删除oci.dll。它说它正在使用中。什么可以使用这个DLL? ASP.NET在Bin目录中使用本机dll时究竟做了什么?我想也许这是涉及oci.dll的东西,但如果我在桌面WinForm应用程序中以类似的方式使用dll,那么oci.dll不会被锁定,我可以自由删除它。
此外,在我尝试使用它之后,正常的System.Data.OracleClient停止工作。它现在抛出一个OCIEnvCreate以-1返回的异常。
我会尝试重新启动IIS,希望能解决这个问题,但我想知道这里发生了什么(如果可以在不重启IIS的情况下解决)。有没有人有想法?
编辑:我尝试重新启动IIS,但没有解决问题
编辑#2:我认为我没有很好地提出这个问题,但那是因为我假设重新启动IIS会起作用。现在我只需要知道它为什么不起作用。在谷歌搜索类似的问题我只遇到2个论坛帖子,告诉我确切的问题:Oracle ODP.NET在尝试连接时返回一个空白异常。这是以下链接:
http://kr.forums.oracle.com/forums/thread.jspa?threadID=632296
http://forums.oracle.com/forums/thread.jspa?threadID=549864
上面的韩文链接是最有趣的。他们有一个完整的安装,让我怀疑我的问题不是文件或丢失的文件。我想知道“生产服务器如果在建立ODP之前调用OCI DLL就抛出空白异常”是什么意思?
编辑/更新#3:我们的部门有一个内部网服务器,我今天可以测试它。我将所需的dll添加到Bin文件夹中,一切正常,无需重新启动IIS。我不问。我将在此服务器上尝试更多测试,看看我是否可以复制问题
编辑#4(奥德赛继续):我确定ASP.NET(或ODP.NET库)最初需要oraocci11.dll(C ++调用接口DLL)才能找到11g客户端dll,之后oraocci11.dll似乎永远不会再次使用,可以删除。不知道这对我的问题意味着什么,但由于它在这里增加了知识库,我想我会提到它
编辑#5:我将mfc71.dll和msvcr71.dll,2个处理C / MFC的Windows系统文件添加到Bin目录中,因为我发现ODP.NET需要它们(或者至少需要它客户)。这至少使得旧的熟悉的“客户端不兼容”错误。我删除了这两个DLL,确定它回到了上面给出的相同错误。然而,添加它们不会使这些错误消失,所以我将不得不重新重置IIS。
答案 0 :(得分:2)
而不是(或同样)停止IIS,使用services.msc停止万维网发布服务,然后进行更改。
我们发现,对于asp.net应用程序使用的图形控件DLL,只是停止IIS是不够的,因为你无法删除文件(或粘贴等)。但是,一旦万维网发布服务停止,它就可以被删除或覆盖......
答案 1 :(得分:2)
典型的Oracle体验。
我有同样的问题。解锁者不起作用。我尝试了几个 - 都报告该文件根本没有锁定,但报告说他们无法删除它。
停止IIS和大多数非核心Windows服务不起作用。
解决方案是重命名文件,重启,然后删除它。出于某种原因,Windows允许您重命名锁定的文件并使其保持锁定状态,但在重新启动时,锁定“oci.dll”的尝试失败,因为它在该名称下不再存在。
答案 2 :(得分:1)
对于DLL,您必须停止IIS,删除它们,然后启动IIS。这是因为它们是本机DLL,而不是C#dll。 C#的'影子副本'功能不适用于原生dll,这就是它们被锁定的原因。
至于oracle,我已经通过电子邮件向你发送了一些东西试试......当你找到解决方案时我们应该更新这个SO页面。
答案 3 :(得分:0)
如果IIS不是锁定文件的进程,并且你真的被困住了,Unlocker可以帮助查看实际锁定文件的内容,以及释放这些锁并强行删除文件。
获取here
答案 4 :(得分:0)
我知道有三件事可以删除属于Oracle Data Access Client的这个和其他文件:
1.停止IIS中的应用程序池。
2.。)关闭Visual Studio。
3.)重新启动机器。