Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Word互操作错误:80040154类未注册_C#_Office Interop - Fatal编程技术网

C# Word互操作错误:80040154类未注册

C# Word互操作错误:80040154类未注册,c#,office-interop,C#,Office Interop,关于这个错误有很多问题,但我找不到适合我的答案。 我正在使用word interop,它在我的开发机器上运行。 当我进行发布构建并运行它时,我得到了这个错误 System.Runtime.InteropServices.COMException:检索CLSID为{…}的组件的COM类工厂失败,原因是出现以下错误:80040154类未注册 我尝试的解决方案是将项目属性更改为64位CPU。 生成服务器是一个64位环境,即Windows 2008 下一步我应该试试什么?是否应将项目属性重置为任何CPU

关于这个错误有很多问题,但我找不到适合我的答案。 我正在使用word interop,它在我的开发机器上运行。 当我进行发布构建并运行它时,我得到了这个错误

System.Runtime.InteropServices.COMException:检索CLSID为{…}的组件的COM类工厂失败,原因是出现以下错误:80040154类未注册

我尝试的解决方案是将项目属性更改为64位CPU。 生成服务器是一个64位环境,即Windows 2008


下一步我应该试试什么?是否应将项目属性重置为任何CPU?

更改启动可执行文件上的生成设置,以生成x86版本(32位)。Office只提供32位版本(直到最近),所以很可能您正在运行32位版本的Office。您引用的任何再培训程序集都可能是任何\u CPU。它们将作为32位加载到32位进程中,或作为64位加载到64位进程中。ANY_CPU可执行文件在64位系统上加载为64位,在32位系统上加载为32位。这将不允许您访问64位系统上的32位office安装。

COM应该是CPU位无关的,如果您发布CLSID,可能有人会帮助您,您是否将.net interop程序集与产品一起分发?您的客户端是否具有正确版本的office?请将项目属性更改为32位(x86)。没有人使用64位office:-)@Bond:COM不是CPU位不可知论者。32位和64位应用程序在注册表的不同位置查找COM对象。32位应用程序将找不到64位COM对象,64位应用程序将找不到32位COM对象。COM对象可以在两者中注册,但这很少见,office肯定不是。我按照您的建议更改了生成设置,但仍然遇到相同的问题。但是,同样正确的是,Microsoft Office未安装在生成服务器上,是吗?您是否在生成中进行了任何可能导致尝试创建word实例的操作(如单元测试)?我将word文档作为模板,将一些单词插入占位符,并将其保存为新的word文档,如邮件合并。所以我在代码中使用了word的一个实例。是的,但是构建服务器通常只获取源代码并构建可执行文件。它通常不会运行构建的可执行文件,除非您在构建过程中进行了一些自动化测试。我不清楚这与修复此问题有什么关系。