我有一个在 Visual Studio 2005 中开发的应用程序,我正在使用 ClickOnce 进行部署。我的解决方案包含两个项目——一个用 VB 编码的用户界面层和一个用 C# 编码的类库。我的 C# 类库有一些使用 Outlook 和 Excel 互操作程序集(Microsoft.Office.Interop.Outlook 和 Microsoft.Office.Interop.Excel,均为 11 版)的代码。这是我的问题。
- 虽然我还没有发现这是绝对的,但我的理解是,您必须拥有适当版本的 Office 应用程序 (Outlook/Excel) 才能安装使用互操作程序集的应用程序。这个对吗?
如果 (1. = 是) 那么
您将如何处理您的应用程序将 Interop 程序集仅用于几个功能,而这些功能将仅被总用户群中的少数人使用?如果只有部分用户需要使用这些功能,为什么我必须要求我的应用程序的每个用户都安装 Microsoft Office?这些 Interop 程序集只是.dll文件,那么是什么让它们与其他文件如此不同,以至于您不能只将文件与您的项目一起发布并满足参考,而不管客户端上安装了什么软件?(显然,我对 GAC 及其对 Visual Studio 行为的影响知之甚少。)我很乐意编写自己的代码来检查是否存在使用它们的少数功能所需的 Office 软件。没有 Office,无法访问功能...
别的
如果我对此的理解不正确,那么如何设置我的引用和 ClickOnce 设置,以便用户在尝试安装时不会遇到以下错误?
“无法安装或运行该应用程序。该应用程序要求首先将 Assembly Office 版本 11.0.0.0 安装在全局程序集缓存 (GAC) 中。
请联系您的系统管理员。”
- 我尝试将我的互操作引用 CopyLocal 属性设置为 True 和 False。
- 在我的 ClickOnce 应用程序文件列表中,我尝试将这些程序集设置为包含、排除和先决条件。
- 在我的研究中,我看到有些人的这些引用指向 *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 要求。
在可能的情况下,请尽量直接回答我的具体问题。虽然文章很有帮助,但我已经阅读了很多文章并尝试了很多建议的解决方案,但都没有成功。请记住,我对这一切如何运作的后勤工作缺乏了解。
请原谅我缺乏理解,并感谢您提供的任何帮助。非常感谢!