我正在尝试将包含Oracle ODP.NET库的VS2013项目部署到Windows 2008 IIS服务器,并从程序集'Oracle.ManagedDataAccess,Version中收到错误“无法加载类型'OracleInternal.Common.ConfigBaseClass' = 4.121.2.0。'“从我在网上找到的,这是由项目的ODP与GAC中具有ODP的服务器之间的冲突引起的。然后,说明将从GAC中删除ODP。服务器上的GAC中有Oracle DLL。我们99%确定这些DLL在之前尝试在该盒子上设置Oracle的时候已经在GAC中出现了,因为该服务器上的其他任何项目都不应该使用Oracle。因此,我们应该安全地将其从GAC中删除。
但是,gacutil.exe仅在Visual Studio中可用,我们不允许将Visual Studio安装到服务器上。
那么如何在服务器上没有gacutil.exe的情况下从GAC卸载Oracle DLL?我们可以从目录中删除它们吗?或者我们是否需要将gacutil.exe从我的工作站复制到服务器才能执行此操作?或者还有另一种方法吗? (最好不涉及注册表编辑)
感谢任何建议,谢谢。
答案 0 :(得分:5)
如果您具有管理员权限,则可以使用Windows界面执行此操作。
导航到位于%systemdrive%\ Windows \ Assembly的GAC。
右键单击应用程序中包含的每个程序集文件,单击“卸载”,然后单击“是”以确认
如果您无法通过上述方法卸载dll,则可以通过打开运行命令并输入以下路径并按Enter键来访问没有特殊视图的GAC文件夹。
C:\Windows\assembly\GAC_MSIL
这将允许您将GAC中的所有文件作为普通文件夹进行交互。
答案 1 :(得分:1)
如果您在任何地方都有Visual Studio,则可以从其位置将gacutil
移植到服务器上。在我的计算机上,使用Visual Studio 2015,它位于C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
。关于SO的另一个问题,它说你也可以单独安装Microsoft SDK(它应该安装在那里,我假设,或者在不同的“v
”文件夹中,如果它是不同的版本)。如果您知道它应该在特定的计算机上,您可以where gacutil
找到它,然后将它和它旁边的gacutil.exe.config
文件复制到服务器。 (where is gacutil.exe?)
当您尝试使用Oracle.ManagedDataAccess
从GAC中删除gacutil
时,有时会出现错误,Windows Installer是一个依赖项(
Unable to uninstall an Assembly from GAC?)。如果是这样,您还必须将其从HKEY_CURRENT_USER\Software\Microsoft\Installer\Assemblies\Global
& HKEY_LOCAL_MACHINE\Software\Classes\Installer\Assemblies\Global
,然后执行gacutil -u
命令。我有这个问题而且我没有去过HKCU的位置 - 但它是在HKLM的位置。从那里删除后,我卸载了&重新安装了Visual Studio的Oracle开发人员工具,为了安全起见(我在这里看到它说:https://community.oracle.com/thread/3944905),然后我的项目终于奏效了。
注意:当我尝试去C:\Windows\assembly\GAC_MSIL
时,我甚至都没有看过Oracle.ManagedDataAccess,所以我无法以这种方式删除它。我发布这个是为了帮助任何可能遇到具有相同问题的顽固DLL的人。