我写了一个单元测试。正在测试的代码引用了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包含在我的解决方案中,并从那里引用。
答案 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,我强烈推荐它。