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

16

我目前正在开发一个C#项目,需要访问Outlook。该项目在两台不同的计算机上进行开发,其中一台安装了Office,而另一台则没有。我之前曾询问如何针对Outlook COM对象编译我的项目,有一个评论建议我编译时使用了Office主互操作程序集(PIA)。在我下载的Office 2007 PIA中,有一个msi文件,可以安装不同部分的Office所需的多个PIA。但我的问题是似乎并没有发生这种情况。在我没有安装Office的电脑上,输入以下内容后:

msiexec /i o2007pia.msi

在提示符处,Windows安装程序启动,并显示一个消息框,上面显示“请稍候,Windows正在配置Microsoft Office 2007 Primary Interop Assemblies。收集所需信息”,同时显示大约33%的进度条,之后消息框消失,此后

gacutil -l microsoft.office.interop.outlook

安装Office 2007 PIAs没有结果(我确实得到了一个版本为10.0.4504.0的结果,这是之前使用错误的Office版本尝试安装的结果。但是Office 2007 PIAs的主要版本是12)。

我看到了几种可能的解释,但我都不太相信:

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

  • 某种方式我没能满足要求。这些要求基本上是XPsp2和.Net 1.1或以上版本,我都有。要求部分还提到,该下载适用于Office 2007,而我没有安装它,但我不认为这是必需的。这是因为它没有作为条件指定,同时在我的原始问题的评论中,Hans Passant非常确定PIAs可以专门用于开发而不需要安装Office,因此将Office作为先决条件是没有意义的。

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

2个回答

15

我之前遇到过一个类似的问题。如果机器上没有安装Office,PIA redistributable 只会安装PIAs。这有点合理,但在部署时可能会很麻烦。

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

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14
可能只有在安装VS时机器上有Office,或者在VS安装程序中有安装VSTO(Visual Studio Office工具)的选项才会安装这些内容。
如果您的问题只涉及在没有Office的开发机上使构建工作正常,那么您可以尝试重新运行VS安装程序,看看是否有安装VSTO的选项,或尝试进行Google搜索,看看是否有单独的VSTO下载。
否则,我建议将PIA从此文件夹复制到其他开发机上类似的位置。

已解决。事实证明,我已经安装了VSTO(至少是与完整的VS2010一起自动安装),因此我也在您提到的路径中拥有Office PIAs。除了在没有Office的情况下进行编译外,我还希望能够将其部署到没有Office的计算机上。我认为只是通过浏览即可引用Outlook PIA会有问题,因为路径是特定于我的计算机的,但是没有问题,因为所引用组件的属性之一是将互操作类型嵌入目标程序集中。非常感谢。 - Boris

2
对于第一个问题,我可以百分之百确定GAC已经实现了支持相同程序集的版本控制。您可以构建名为myCode.dll的程序集并将其版本1.0注册到GAC中,然后构建版本1.1和2.0并将它们都添加到GAC中,即使它们都具有相同的文件名,GAC也会保留两个版本,并且每个应用程序都能够根据可用的程序集绑定信息使用适当的版本。基本上,每个引用版本1.0的应用程序仍然会得到它,除非另有规定,并且不会受到新版本存在的影响。
最终,当您列出Outlook PIA在GAC中的存在时,您只会看到最新可用版本而不是所有版本,但肯定可以通过某种方式将另一个版本推送到GAC中。

1
是的。据我所知,支持多个库版本是GAC的主要设计目标之一。但这是我第一次直接处理它,所以我只是想确保我没有漏掉什么。 - Boris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接