c# - 使用 Microsoft.Office.Interop dll 的单元测试在生成服务器上失败

标签 c# excel com ms-office

我写了一个单元测试。被测代码引用Microsoft.Office.Interop.Excel.dll。

测试在我的机器上运行良好,但在构建服务器上失败。它在实例化 Excel 应用程序的行失败:

var application = new Application { Visible = Visible };

错误是:

System.Runtime.InteropServices.COMException: 
Retrieving the COM class factory for component with CLSID 
{00024500-0000-0000-C000-000000000046} failed due to the following error:
80040154 Class not registered

这是否意味着我必须在我的构建服务器上安装可再发行主互操作程序集?如果是这样,我还需要在构建服务器上安装 Excel 吗?

编辑: Microsoft.Office.Interop.Excel.dll 包含在我的解决方案中并从那里引用。

最佳答案

如果您将 Microsoft.Office.Interop.Excel.dll 添加到库文件夹中的解决方案并引用那里的程序集,那么构建机器应该在您升级时获得所需的程序集。否则,您将引用安装 Excel 时附带的程序集。此外,如果您尝试分发您的应用程序而不将其放入解决方案中,任何试图运行您未安装 Excel 的应用程序的人都会遇到运行时错误。

当然,如果您不想重新分发程序集,您还有另一种选择,即在调用 Excel 程序集的代码周围放置一个 try/catch,然后向用户显示一条消息,说明需要安装 Excel .

最后,每个版本的 Excel(2010、2007 等)都有不同的版本号。意思是,如果您使用的是 2010 程序集并且有人安装了 2007 Excel,他们将遇到运行时错误。我最终使用的答案是通过反射(reflection)来选择在他们的环境中使用哪个程序集。

关于c# - 使用 Microsoft.Office.Interop dll 的单元测试在生成服务器上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762506/

相关文章:

c# - .NET 私​​钥 Rsa 加密

c# - 从 VideoPlayer 获取当前帧纹理

C#:从泛型方法调用非泛型方法

com - 将 First Data(以前的 YourPay 和 LinkPoint)支付网关与自定义 ASP 预订系统集成

c# - 枚举 COM/DCOM/COM+ IN_PROC 实例

c# - 使用大写和小写标记解析 HTML Agility Pack?

c# - 当我打开 Excel 时出现第二个 Excel 插件(功能区)安装,为什么?

python - 使用 Pandas 修改excel文件的标题

java - Java计算Excel某列重复行数

api - 16 位 .com 可执行文件可以调用 win32 API 吗?