gpt4 book ai didi

c# - 尝试不需要针对 x86 和 x64 程序的两个单独的解决方案

转载 作者:太空狗 更新时间:2023-10-29 20:18:26 27 4
gpt4 key购买 nike

我有一个程序需要在 x86 和 x64 环境中运行。它使用 Oracle 的 ODBC 驱动程序。我有对 Oracle.DataAccess.DLL 的引用。不过,此 DLL 会有所不同,具体取决于系统是 x64 还是 x86。

目前,我有两个独立的解决方案,我正在维护这两个解决方案的代码。这太残忍了。我想知道正确的解决方案是什么?

我将我的平台设置为“任何 CPU”。我的理解是 VS 应该将 DLL 编译为中间语言,这样无论我使用 x86 还是 x64 版本都没有关系。然而,如果我尝试使用 x64 DLL,我会收到错误“无法加载文件或程序集‘Oracle.DataAccess,Version=2.102.3.2,Culture=neutral,PublicKeyToken=89b483f429c47342’或其依赖项之一。已尝试加载格式不正确的程序。”

我在 32 位机器上运行,所以错误消息是有道理的,但这让我想知道当它需要在 x64 上工作时我应该如何有效地开发这个程序。

谢谢。

最佳答案

这纯粹是一个部署问题,您永远不必维护不同的项目。虽然这是一个尴尬的问题,但 Oracle 没有自己处理这个问题。另一个考虑因素是这个程序集真的应该在目标机器上生成。一些选项

  • 创建两个安装程序,一个用于 x64,一个用于 x86。客户根据她使用的操作系统选择合适的。很简单,您只需复制正确的文件即可。
  • 将两个程序集部署到 GAC。现在它是自动的,.NET 在任何一种机器上选择正确的。大公司应该几乎总是使用 GAC,以便他们可以部署安全更新,不知道为什么 Oracle 不这样做。
  • 将程序集部署到安装目录的 x86 和 x64 子目录中。您需要编写一个 AppDomain.AssemblyResolve 事件处理程序,它根据 IntPtr.Size 的值选择正确的目录。
  • 将您的 EXE 项目的目标平台更改为 x86。鉴于您的代码需要在 32 位机器和 64 位机器上运行,因此没有/不应该有理由为 AnyCPU 构建。

关于c# - 尝试不需要针对 x86 和 x64 程序的两个单独的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com