【问题标题】:Running multiple versions of the same Excel VSTO add-in simultaneously同时运行同一个 Excel VSTO 加载项的多个版本
【发布时间】:2018-10-10 16:06:32
【问题描述】:

我们有一个内部工具,允许用户配置和启动他们的 Excel 会话。例如,他们可以选择特定版本的 Excel 加载项、不同的环境变量等。有些用户甚至同时启动两个使用不同加载项版本的不同 Excel 会话。

我们希望允许用户选择不同版本的 Excel VSTO 加载项。现在,该工具执行一个批处理脚本,在运行 Excel 之前设置适当的注册表项。理想情况下,它们应该能够同时运行不同的版本。这可能吗?

一种选择是发布具有不同名称的不同版本的 VSTO 加载项,然后在 Excel 启动时选择要以编程方式加载的正确版本。我不确定如何实现,但这并不理想,因为所有版本都会出现在 Excel 中的 COM 加载项列表中。

我正在考虑自定义创建 VSTO 注册表条目的脚本,以在运行 excel 之前更改条目。因此,我们的 VSTO 加载项只有一个条目,我们将更改它的 location 属性以指向不同版本的加载项。当两个 Excel 实例以不同的位置为同一个 VSTO 插件启动时,这会起作用吗?您是否发现任何潜在问题?

【问题讨论】:

  • 您找到问题的解决方案了吗?我们有基本相同的问题。
  • 这听起来完全是倒退——为什么不给您的用户一种配置插件工作方式的方法,以便他们可以明确地选择他们希望插件执行的方式? Nothign 会阻止您的插件根据一些用户可配置的值执行其工作。

标签: excel vsto office-addins excel-addins


【解决方案1】:

我想我找到了解决这个问题的方法。不是特别漂亮,但到目前为止还有效。

我的问题是,我们希望能够在同一台 PC 上安装 VSTO,并在其上进行开发(从 VS 运行),而无需一直卸载它。

当我更改程序集名称时,它与部署时不同,我没有冲突。 为了不弄虚作假,我添加了一个预构建事件:

if $(ConfigurationName) == Release ( if '$(ProjectName)' == '$(TargetName)' ( exit 0 ) else (
 echo "Assembly name must be same as project name in RELEASE"
 exit 21) )
if $(ConfigurationName) == Debug ( if '$(ProjectName)' == '$(TargetName)' (
 echo "Assembly name must be different from project name in DEBUG"
 exit 20 ) )

部署时看到它是在Release中构建的,我们在本地Debug中运行它。

我不得不将 RibbonTab 的 ControlIdType 更改为自定义。

我还想弄清楚用户/开发者/我正在与哪个版本进行交互,所以在功能区中我添加了一个功能:

    private void PostInitialize()
    {
    #if DEBUG
        tabRdTools.Label += " DEVELOPMENT";
        tabRdTools.Name += "Dev";
    #endif
    }

在 ...Designer.cs 文件中,我添加了对 PostInitialize 的调用:

    public RDToolsRibbon()
        : base(Globals.Factory.GetRibbonFactory())
    {
        InitializeComponent();
        PostInitialize();
    }

基本上这个想法是开发人员在开发时(在调试模式下)在程序集名称中添加“.dev”。

这会导致色带后置“DEVELOPMENT”,不会干扰已安装的 VSTO。

缺点:您必须手动更改程序集名称。如果每次将程序集名称更改为不同的东西,最终可能会产生很多回声。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 2011-08-13
    • 1970-01-01
    • 2021-05-14
    • 2010-10-12
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多