我写了一个单元测试。被测代码引用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/