为啥办公室 PIA 不能正确安装到 GAC?

Posted

技术标签:

【中文标题】为啥办公室 PIA 不能正确安装到 GAC?【英文标题】:Why doesn't the office PIA install correctly to the GAC?为什么办公室 PIA 不能正确安装到 GAC? 【发布时间】:2011-07-01 12:07:20 【问题描述】:

我目前正在处理一个需要访问 Outlook 的 c# 项目。开发是在两台不同的机器上完成的,其中一台安装了办公室,另一台没有。我previously 询问如何针对 Outlook com 对象编译我的项目,其中一位 cmets 建议我针对 office 主互操作程序集或 PIA 进行编译。在我下载的Office 2007 PIA 中,有一个 msi 文件,它应该为 Office 的不同部分安装许多 PIA。我的问题是这似乎不会发生。在我没有办公室的机器上,打字后

msiexec /i o2007pia.msi

在提示符下,Windows 安装程序启动,显示“请稍候,Windows 正在配置 Microsoft Office 2007 主要互操作程序集。正在收集所需信息”的消息框以及大约 33% 的进度条,之后消失,然后

gacutil -l microsoft.office.interop.outlook

对于 Office 2007 没有结果(我确实得到了一个结果,它的版本是 10.0.4504.0,是早期安装尝试使用错误的 Office 版本的结果。但 Office 2007 PIA 的主要版本是 12。)

我看到了几种可能的解释,但我并不真正相信:

GAC 无法处理同一程序集的多个版本,因此不允许我安装更新的版本。

不知怎的,我不满足requirements。这些基本上是 XPsp2 和 .Net 1.1 或更高版本,我都有。要求部分还提到,下载适用于我没有安装的office 2007,但我认为这不是要求。这既是因为 is 没有被指定为要求,也是因为 Hans Passant 在对my original question 的评论中非常确定 PIA 可以专门用于在没有安装 Office 的情况下进行开发,因此没有任何意义办公室作为先决条件。

那么有没有人知道为什么 Office 2007 PIA 没有正确安装,或者我可以做些什么来接近答案?如果您需要更多信息,请告诉我。谢谢。

【问题讨论】:

【参考方案1】:

对于第一点,我 100% 确定 GAC 已实现支持相同程序集的版本控制,您可以构建一个名为 myCode.dll 的程序集并将其版本 1.0 注册到 GAC,然后构建版本 1.1和 2.0 并将它们都添加到 GAC,即使它们都具有相同的文件名,GAC 也会保留它们,并且每个应用程序都将能够根据可用的程序集绑定信息使用正确的版本,基本上每个应用程序都有一个引用除非指定,否则到 1.0 版仍然可以获取它,并且不受新版本存在的影响。

最终,当您在 gac 中列出 Outlook PIA 的存在时,您只会看到最新的可用版本,而不是全部,但您肯定应该能够以某种方式在 GAC 中推送另一个版本。

【讨论】:

是的。据我了解,支持库的多个版本是 gac 的主要设计目标之一。但这是我第一次如此直接地处理它,所以我只是想确保我没有遗漏什么。【参考方案2】:

我不久前就遇到过这个,有一个类似的项目。只有在计算机上已经安装了 Office 的情况下,PIA 可再发行组件才会安装 PIA(这是有道理的,但在部署时可能会很烦人)

Visual Studio 应该将 Office PIA 安装到它自己的安装目录下的文件夹中 - 例如,在我的机器上,我有一份所有 PIA 的副本:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14

只有在安装 VS 时您的计算机上有 Office,或者 VS 安装程序中有一个安装选项来安装 VSTO(Visual Studio Tools for Office)时,才可能安装这些。

如果您的问题只是与在没有 Office 的开发机器上运行构建有关,那么您可以尝试重新运行 VS 安装程序并查看是否有安装 VSTO 的选项,或者尝试 google搜索看看有没有单独的VSTO下载

否则,我只会将此文件夹中的 PIA 复制到另一个开发框上的类似位置。

【讨论】:

已解决。事实证明,我已经安装了 VSTO(它似乎是自动安装的,至少在完整的 VS2010 中),所以我还在你提到的路径上安装了 Office PIA。除了在没有办公室的情况下编译,我还希望能够部署到没有办公室的机器上。我认为仅通过浏览来引用 Outlook PIA 会出现问题,因为路径将特定于我的机器,但没有问题,因为引用组件的属性之一是将互操作类型嵌入到目标程序集。非常感谢。

以上是关于为啥办公室 PIA 不能正确安装到 GAC?的主要内容,如果未能解决你的问题,请参考以下文章

为啥word文档插入图片不显示

win10为啥不能修改网络位置,一直都是公用网络,怎么修改?

安装红旗的Linux,开始菜单里面的Openoffice系列办公软件不能用。

配置小型办公网络 (LAN) 的正确方法是啥

为啥要学习office办公软件

GAC - 要将程序集添加到 GAC,拖放可以,但复制和粘贴不行?为啥?