2013-02-19 100 views
0

有很多關於這個錯誤的問題,但我找不到適合我的答案。 我正在使用word interop,並在我的開發計算機上工作。 當我做一個發佈版本並運行它,我得到這個錯誤;Word interop error:80040154 Class not registered

System.Runtime.InteropServices.COMException:檢索具有CLSID {...}的組件的COM類工廠失敗,原因如下:80040154未註冊的類。

在解決方案,我試過將項目屬性更改爲發佈到64位CPU。 構建服務器是64位環境,Windows 2008.

接下來我應該嘗試什麼?我應該重置項目屬性到任何CPU?

+0

COM *應該*是CPU位不可知的,也許如果你發佈CLSID有人可以幫助你,你是否與你的產品分發.net互操作程序集?你的客戶有沒有合適的辦公室版本? – Bond 2013-02-19 17:02:41

+0

將項目屬性更改爲32位(x86)。沒有人使用64位的辦公室:-) – adrianm 2013-02-19 17:16:12

+0

@Bond:COM不是CPU位不可知的。 32位和64位應用程序在註冊表中的不同位置查找COM對象。 32位應用程序無法找到64位COM對象,並且64位應用程序無法找到32位COM對象。一個COM對象可以在兩者中註冊,但這是罕見的,辦公室絕對不是。 – adrianm 2013-02-19 17:21:24

回答

0

在啓動的可執行文件上更改生成設置以生成x86版本(32位)。 Office只能用於32位版本(直到最近),所以你運行的是32位版本的辦公室。您引用的任何重新編譯的程序集都可能是ANY_CPU。它們將作爲32位加載到32位進程或64位進入64位進程。 ANY_CPU可執行文件將在64位系統上加載爲64位,在32位系統上加載爲32位。這將不允許您訪問64位系統上的32位Office安裝。

+0

我按照你的建議更改了我的構建設置,但仍然遇到同樣的問題。但是,同樣如此,Microsoft Office未安裝在構建服務器上,是否應該這樣做? – arame3333 2013-02-20 08:14:21

+0

你是否在你的構建(如單元測試)中做任何會導致嘗試創建單詞實例的東西? – user957902 2013-02-20 13:07:28

+0

我將一個單詞文檔作爲模板,將一些單詞插入一個佔位符,並將它保存爲一個新的單詞文檔,如郵件合併。所以我在我的代碼中使用了一個單詞的實例。 – arame3333 2013-02-20 13:53:50