在构建服务器上使用Microsoft.Office.Interop dll进行单元测试失败

时间:2011-07-20 13:11:23

标签: 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

这是否意味着我必须在构建服务器上安装Redistributable Primary Interop Assemblies?如果是这样,我还需要在构建服务器上安装Excel吗?

修改 Microsoft.Office.Interop.Excel.dll包含在我的解决方案中,并从那里引用。

3 个答案:

答案 0 :(得分:3)

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

当然,如果你不想重新发布程序集,那么你可以选择其他选项是在调用Excel程序集的代码周围放置一个try / catch,然后向用户显示一条消息,说明需要安装Excel

最后,每个版本的Excel(2010年,2007年等)都有不同的版本号。这意味着,如果您正在使用2010程序集并且有人安装了2007 Excel,则会出现运行时错误。我最终使用的答案就是选择在他们的环境中使用哪个程序集。

答案 1 :(得分:3)

是的,看起来你需要install the PIA

  

Microsoft Office产品的主互操作程序集也可在可再发行的Microsoft Windows Installer程序包中使用:

     

Microsoft Office 2003的程序包可从Microsoft下载中心(http://go.microsoft.com/fwlink/?LinkId=50479)下载。

     

可以从Microsoft下载中心(http://go.microsoft.com/fwlink/?LinkId=72637)下载2007 Microsoft Office system的软件包。

而且,为了完整起见,Office 2010软件包位于:(http://www.microsoft.com/download/en/details.aspx?id=3508

答案 2 :(得分:1)

您需要为该版本安装Office和主互操作程序集,或者Visual Studio才能使其正常运行。您可能会遇到在CI环境中运行的COM问题,如果您可以重新构建测试以避免使用Office Interop,我强烈推荐它。