繁体   English   中英

使用Oracle.DataAccess参考部署C#控制台应用程序

[英]Deploying C# console app with Oracle.DataAccess reference

我一直在尝试将我制作的ac#控制台应用程序部署到服务器。 我基本上已经将Release文件夹的内容复制到了服务器上,除了Oracle以外,其他所有东西似乎都能正常运行。 在开发机器(32位XP)上,我具有OracleClient 11.2,而服务器(64位服务器2008)具有11.1。 如果我在本地计算机上运行该应用程序,则该应用程序可以运行。

通过仅复制Release文件夹并尝试运行应用程序进行部署时,出现以下错误:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified.
File name: 'Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342'
   at PDV.AODGateway.StoredProcedures..ctor()
   at PDV.AODGateway.AODGateway.Export()
   at PDV.AODGateway.AODGateway.Main(String[] args)

(寻找111.7版本不要读太多。它说这是因为我尝试在app.config中指定以查找该版本。以前它说找不到112.1)。

它失败的代码部分是我创建OracleConnection对象的地方。

如果我尝试将dll从服务器复制到部署文件夹中,则会收到类似的错误:

Unhandled Exception: System.TypeInitializationException: The type initializer for 'PDV.AODGateway.StoredProcedures' threw an exception. ---> System.BadImageFormatException: Could not load file or assembly 'Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342'
   at PDV.AODGateway.StoredProcedures..cctor()

我最终通过将这些文件从开发计算机(即用于构建解决方案的计算机)上的oracleclient文件夹复制到服务器上应用程序的目录中来解决了该问题:

Oracle.DataAccess.dll
oci.dll
OraOps11w.dll
oraociei11.dll

但是,这似乎是非常糟糕的做法,因此,您对我该如何解决这个问题有任何建议吗? 你们有没有遇到过这个问题?

之前,我已经使用Oracle Data Access Components运行了类似的问题。 我的猜测是您使用控制台应用程序的构建配置中的AnyCPU平台目标构建了.exe。 这意味着,当它在32位开发计算机上运行时,它将被加载到32位进程中,而在64位服务器上,它将被加载到64位进程中。 问题在于Oracle.DataAccess.dll组件具有两种不同的风格,即32位和64位版本。 当您从开发机器将32位版本复制到Deployment bin目录时,在运行时,应用程序将尝试将显式标记为32位的程序集加载到64位进程中,该程序将不起作用,并说明您为什么获得此权限System.BadImageFormatException

因此,最好的解决方案可能是在控制台应用程序的项目设置中为发布配置显式定位64位平台,并引用Oracle.DataAccess.dll的64位版本。 在服务器上,您需要在GAC中安装64位Oracle.DataAccess.dll(安装ODAC时可能已经安装过),或者您需要在应用程序中部署64位程序集。

当您需要同时针对两个平台时,我发现这些东西很痛苦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM