1

我正在尝试在我的 VisualStudio 2010 中运行这个项目。它在我的 64 位机器上构建并运行良好。

注意:我必须将项目的构建平台更改为 x86。

我的问题是当我尝试运行已编译的程序集时(在将调试文件夹移动到另一台 64 位机器之后)我无法运行我的项目。当我打开它时,我的 exe 崩溃了。

根据我的理解,问题是因为项目中使用的三个 DLL 是 32 位,机器是 64 位。

注意:下面是三个 DLL

Interop.Office.dll

Interop.VBIDE.dll

Interop.Word.dll

我google了很多,但找不到任何解决方案?我想到的一个解决方案是设法获得上述 DLL 的 64 位版本,因为我也用谷歌搜索了很多但什么也得不到。你能帮我找到解决这个问题的方法吗?或者有什么方法可以找到上述 DLL 的 64BIT 版本?

4

3 回答 3

2

如果您必须使用 32 位 dll,您可能无法运行在 64 位上编译的应用程序。

因此,在发布到另一台电脑之前,您需要在 32 位模式下编译所有项目(就像您为调试所做的那样)。

您可以使用 Microsoft CorFlags.exe实用程序确保您的 dll 编译正确(仅限 32 位) 。

如果您发现 dll 不是 32 位的,您也可以尝试使用相同的实用程序(/32BITS falg)更改它。

于 2013-04-29T04:14:54.340 回答
1

更多信息:

Office 的默认版本是 32 位版本。

要获得 64 位版本的程序集,您需要专门安装 64 位 office(请参阅此处。) 64 位版本的 Office 应该能够使用您的 32 位程序(使用 WoW),但最好是创建(和测试)它有两个版本:一个用于 32 位,一个用于 64 位。

不幸的是,这意味着两个开发环境,因为 32 位 Office不能与 64 位一个一起安装。

于 2013-04-29T05:37:28.373 回答
1

你确定办公室互操作是问题吗?

您收到的错误信息是什么?您已声明您正在使用 x86 平台构建模式进行编译。因此,即使在另一台 64 位机器上,您的 dll 也将作为 32 位进程运行,因此将调用 32 位 office dll。

如果您已编译为 AnyCPU,那么我可以看到您遇到的错误与 office dll 位数有何关系,因为您的应用程序将以 64 位(在 64 位机器上)启动,然后尝试调用 32 位 office dll。

但我不明白您是如何发现 32 位 dll 是任何 32 位或 64 位机器上的问题,因为您正在编译为 32 位(x86)。所以你的程序集清单告诉 JIT 编译器,“嘿,我是 32 位进程”。

请记住,除了 ngen 之外,您的代码的位数在运行之前是不会确定的。编译后代码只是等待编译的 IL,无论您的构建平台是 x86、x64 还是 AnyCPU,它都是相同的 IL。

当它运行时,运行时查看清单并将其编译到选择的平台......在这种情况下是x86......从你所说的。

所以问题不在于:

项目中使用的三个 DLL 是 32 位,机器是 64 位。

在 64 位机器上到处都在使用 32 位 dll。Visual Studio 本身是一个 32 位应用程序,在 64 位机器上运行良好。问题(恕我直言)是

  1. 根本不是office dll,而是其他东西... Office 安装在我假设的另一台机器上。
  2. 在部署到 x86 以外的平台之前,您不小心更改了上次构建的目标平台。
于 2013-05-04T03:35:11.613 回答