Microsoft Office Interop程序集参考

5 excel outlook interop visual-studio-2005 global-assembly-cache

我有一个在Visual Studio 2005中开发的应用程序,我使用ClickOnce进行部署.我的解决方案包含两个项目 - 用VB编码的用户界面层和用C#编码的类库.我的C#类库有一些使用Outlook和Excel互操作程序集的代码(Microsoft.Office.Interop.Outlook和Microsoft.Office.Interop.Excel,版本11).这是我的问题.

  1. 虽然我还没有找到绝对的地方,但我的理解是你必须拥有适当版本的Office应用程序(Outlook/Excel)才能安装使用Interop程序集的应用程序.它是否正确?

如果(1. =是)那么

您将如何处理您的应用程序仅使用Interop程序集的几种功能的情况,这些功能将仅由少数总用户群使用?如果只有部分用户需要使用这些功能,为什么我必须要求我的应用程序的每个用户安装Microsoft Office?这些Interop程序集只是.dll文件,所以是什么使它们与其他文件不同,因为你不能只用你的项目发布文件,并且无论客户端安装了什么软件,都能满足引用?(显然,我对GAC的理解很差,并且它对Visual Studio的行为有影响.)我很乐意编写自己的代码来检查是否存在使用它们的少数功能所需的Office软件.没有办公室,无法访问功能......

其他

如果我对此的理解不正确,那么我如何设置我的引用和ClickOnce设置,以便用户在安装尝试时不会遇到以下错误?

"无法安装或运行应用程序.应用程序要求首先在全局程序集缓存(GAC)中安装程序集团版本11.0.0.0.

请联系您的系统管理员."

  • 我已经尝试将我的Interop引用CopyLocal属性设置为True和False.
  • 在我的ClickOnce应用程序文件列表中,我尝试将这些程序集设置为Include,Exclude和Prerequisite.
  • 在我的研究中,我看到有些人将这些引用指向*C:\ WINDOWS\assembly\GAC*,我的指向*C:\ Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11*但我还没有找到改变参考路径的方法.根据http://msdn.microsoft.com/en-us/library/ez524kew(VS.80).aspx,您无法添加来自GAC的引用,那么其他人如何管理呢?
  • 我已经尝试将*C:\ Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11*中的引用复制到我的项目目录并在那里引用它们.

万一

我想我需要知道的主要事情是如何/如果我可以在我的出版物中包含这些程序集并满足或绕过GAC要求.

如果可能,请尽量直接回答我的具体问题.虽然文章很有帮助,但我已经阅读了很多文章并尝试了很多建议的解决方案并且没有找到成功.请记住,我对这一切的工作原理缺乏了解.

请原谅我缺乏理解,并感谢您提供的任何帮助.非常感谢!

Gov*_*ert 8

您可能希望查看NetOffice项目:http://netoffice.codeplex.com/.

它是免费的(MIT许可证)和完整的(所有版本2000-2010和所有Office应用程序)一组独立于版本的互操作程序集.程序集是使用工具从实际PIA生成的,因此它们是正确的,完整的和最新的,并且可能会在将来的版本中快速更新.

另一个不错的功能是每个成员的IntelliSense显示哪个Office版本实现该成员.

对于部署,您可以使用应用程序复制或安装程序集.


Guy*_*uck 2

根据我的经验,尝试在广泛的部署场景中管理办公室互操作程序集是一场噩梦。如果您通过 ClickOnce 进行部署,即使您解决了上面提到的 GAC 问题(也许通过让您的 IT 部门推出互操作程序集的 GAC 注册,如果这是企业环境),您也需要处理以下情况:用户拥有与标准版不同的 Office 版本 - 当 Office 13 发布并且用户开始升级并且它破坏了您的应用程序时,天堂会帮助您。

为了避免使用版本相关的互操作程序集,可以直接使用 pinvoke 到 Office COM 包装器来实现办公自动化,这些包装器是版本无关的(它们从注册表中提取客户端上当前的 Office 版本)。不过,这也有其自身的部署挑战(例如,您可能需要更新注册表以处理安装了 PIA 的计算机,这在使用 ClickOnce 进行部署时可能非常具有挑战性),并且开发起来更加困难。

如果我处于您的立场,我会首先仔细研究您在类库中使用的互操作功能 - 在客户端计算机上的办公室互操作之外,是否有另一种方法可以提供您所需的功能?也许是一种面向服务的解决方案,其中客户端向服务器提交请求以生成定制的办公文档并提供下载......