【问题标题】:VSTO 2003-2010 add-in compatibilityVSTO 2003-2010 插件兼容性
【发布时间】:2011-07-10 06:18:17
【问题描述】:

我想创建一个与 Office 2003、2007 和 2010 兼容的 Office 插件。VS2008 允许创建插件 2003/2007,而 VS2010 允许创建 2007/2010。我都安装了。

我之前开发了 2007/2010 插件作为 2007 插件,可自动与 Office 2010 配合使用。

我现在面临的问题是 Office 2003 中缺少功能区界面以及如何构建项目以使单个加载项与 Office 2003-2010 兼容。

考虑到各种 Office 版本(尤其是 2003 到 2007/2010)之间的差异,是否有可能为所有人提供一个插件?

【问题讨论】:

  • 如果您有兴趣,请提交:stackoverflow.com/documentation/outlook-addin/commit

标签: c# vsto ms-office outlook-addin


【解决方案1】:

使用 VSTO,您可能需要不同的插件(请参阅英文 Wikipedia 文章中关于 VSTO 的 table of compatibility)。

如果 (1) 您需要将解决方案快速推向市场,并且 (2) 您有理由相信您的代码库将来需要频繁更新,您可以考虑使用第三方工具,例如Add-in Express,让您轻松创建所需内容。

【讨论】:

  • 第三方解决方案不适合我。看来我需要构建至少 2 个加载项,一个用于 2003,另一个用于 2007/2010。谢谢!
  • 不是真的,你只需要两套 UI 代码。您的功能区代码可以采用 XML 格式或通过设计器创建,而 2003 版本将使用命令栏模型代码。运行命令栏代码并连接事件或在启动时根据应用程序加载 XML 文件并不困难。版本
  • 我同意 Domke 的观点,鉴于 Addin Express 的低成本,对于没有资金支持更复杂的部署和发布过程的团队或个人来说,它是一个合适的解决方案.
【解决方案2】:

实际上,我正在使用 Visual Studio 2010 为 Office 开发共享加载项,并且我对 Office 版本有相同的要求。它实际上在这些办公室中加载(尽管微软说 VS 2010 插件与 Office 2003 不兼容)。我使用 Application.Version 检查版本。如果它小于 12,那么我使用 CommandBars 以编程方式构建菜单。否则,我使用功能区扩展(从 xml 加载)来构建菜单。

更新您必须记住,某些功能在 Office 2003 中不可用。例如 TextRange2。

【讨论】:

    【解决方案3】:

    我创建了一个针对 2003、2007 和 2010 版本的 Outlook 的加载项。 我在我的开发机器上使用 VS2008、VSTOSE 和 PIA2003 以及 Outlook 2003 进行了此操作。我不知道这将如何扩展到办公室/文档级插件,但它可能会起作用。

    但是,您需要检测每个客户端上的 Outlook/Office 版本并安装相应的 PIA。

    这可以使用Component Checker 来完成。然后,您可以在每个 Bootstrapper 包中查看存在哪个版本,并仅在适用时安装该包。例如,在您将拥有的引导程序包的 product.xml 中:

    <?xml version="1.0" encoding="utf-8"?>
    

    <InstallChecks>
        <ExternalCheck Property="Office2003Exists" PackageFile="ComponentCheck.exe" Arguments="{3EC1EAE0-A256-411D-B00B-016CA8376078}"/>
        <ExternalCheck Property="Office2003PIAExists" PackageFile="ComponentCheck.exe" Arguments="{14D3E42A-A318-4D77-9895-A7EE585EFC3B}"/>
    </InstallChecks>
    
    
    <Commands Reboot="Defer">
        <Command PackageFile="o2003pia.msi" Arguments="" EstimatedInstalledBytes="30000000" EstimatedInstallSeconds="60">
            <InstallConditions>
                <BypassIf Property="Office2003Exists" Compare="ValueNotEqualTo" Value="0" />
                <BypassIf Property="Office2003PIAExists" Compare="ValueEqualTo" Value="0" />
                <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
            </InstallConditions>
    
            <ExitCodes>
                <ExitCode Value="0" Result="Success"/>
                <ExitCode Value="1641" Result="SuccessReboot"/>
                <ExitCode Value="3010" Result="SuccessReboot"/>
                <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
            </ExitCodes>
        </Command>
    </Commands>
    

    2007 年的产品 ID 是:

    Outlook : 0638C49D-BB8B-4CD1-B191-050E8F325736 
    PIA: ED569DB3-58C4-4463-971F-4AAABB6440BD
    

    2010 年的产品 ID 是:

    Outlook : CFF13DD8-6EF2-49EB-B265-E3BFC6501C1D
    PIA: 1D844339-3DAE-413E-BC13-62D6A52816B2
    

    这确实意味着您必须在安装程序包中包含先决条件,而不是允许下载,这显然会增加下载大小。

    您也只能使用 2003 年的方法等。此外,您创建的任何工具栏都是基本的,因为您无法完全控制功能区。您仍然可以像在 2003 年和 2007 年一样添加按钮等。它们将在 2010 年出现在自己的功能区组中。

    但是,在我的解决方案中,我为任何不与 Outlook 交互的东西创建了一个单独的程序集。这样,如果将来需求发生变化,我可以轻松地将加载项拆分为目标特定版本,而不会影响加载项的主要核心功能。

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多