您好,我一直在与理解MS Office的主要互操作程序集(PIA)部署相关的一些复杂性。我有基于纯com技术的VS 2008中内置的Visual Studio Com加载项(不是VSTO,请参阅此底部以获取更多信息),它引用了2003 Primary Interop Assembly,但是该加载项可能在2003、2007或现在的2010年使用办公机器。因为我不知道客户是否将使用2003、2007或2010,所以我不能简单地部署一个PIA版本作为先决条件(除非我制作了3个我不想做的安装程序)。现在,我的理解是,当您按照here步骤将2003和2007 PIA添加到Visual Studio(2008)安装程序包中显示的先决条件列表时,这些先决条件足够聪明,可以确定客户端上正在运行的Office版本您正在定位。因此,如果您要选择2003主互操作程序集和2007主iterop程序集作为先决条件,则当此程序安装在具有2003的计算机上时,应该足够聪明,仅在该计算机上缺少2003 PIA时才尝试添加2003 PIA。如果这是2007 Office计算机,则它将仅安装2007 PIA(而不尝试安装2003 PIA)。
问题1 是正确的理解吗(必备软件包是否智能,仅根据Office版本安装所需的软件包?)
问题2 是否有办法让2010 PIA在VS 2008之类的先决条件列表中显示,例如2003和2007?我不想将此项目升级到VS 2010 b/c,它现在被认为是旧版应用程序,世界各地的许多客户都在使用它。
问题3 即使实际的程序集引用了2003年的主要互操作程序,我目前也没有将带有插件的这些互操作程序部署到安装位置。相反,我假设如果可以安装正确的PIA,则在安装路径中不需要此设置,因为PIA将位于GAC中。但是,一种可能的方法可能是仅在安装路径中包括引用的2003程序集(在我的情况下为excel和word),而不必担心PIA。我怀疑这将在2003年的机器上运行,但可能不适用于后者的2007年和2010年的机器b/c,即使在运行时在程序集的安装路径中找到了所引用的2003年互操作性,我想如果没有GAC中的Policy.11.0.Microsoft.Office.Interop.Excel/Word(etc),那么2007和2010可能不知道如何处理11.0(2003)互操作性(我认为Policy.11.0.Microsoft。 Office.Interop文件将2003互操作的请求重定向到2007或2010。有什么想法吗?
问题4: Framework 2.0应用程序Office加载项和Office 2003存在一个众所周知的错误,该加载项不会加载。 KB907417或KB908002解决了此问题。难道没有人知道,如果您在3.0或3.5框架上进行开发(并且使3.0或3.5成为前提条件),则此KB是否必要,因为此问题特定于框架2.0?还是仍然需要部署KB,因为问题是Office 2003,而不是框架的版本?
正如您通过我的3个问题可以看出的那样,我要确定的是我们是否可以通过VS安装实用程序来构建一个安装程序。如果可以使用一个安装程序来完成PIA,但是上面的KB是一个障碍(也许答案会回来,即使在2003或3.5框架上,客户也需要KB),那么也许一个安装程序的路径就是KB是一个全面的先决条件,并可以将其安装在2007或2010机器上,尽管从技术上讲它们不需要它们。对此选项的任何想法也将不胜感激。最后,我知道现在通常使用VSTO代替纯托管框架代码来编写用于excel或word的托管的Com加载项,但这不是将旧版应用程序朝此方向更改的选择。另外,据报道,现在可以使用4.0框架来部署外接程序,而不必以任何PIA为前提,但是同样,这不是当前可行的选择。
最佳答案
代码是否使用任何Office 2007+方法或类?如果不是,您确定不能在所有情况下都使用2003 PIA吗?更高版本的应用程序应该向后兼容(支持相同的API),因此,我认为需要更新的PIA的唯一原因是,如果您需要访问2007或更高版本所添加的某些功能。
您可能想看看Add-in Express,它保证了一个适用于所有版本的安装程序,并且非常易于使用。
关于deployment - 将PIA部署到Office的混合版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3702884/