gpt4 book ai didi

excel - 同时运行同一 Excel VSTO 加载项的多个版本

转载 作者:行者123 更新时间:2023-12-04 19:50:45 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

我的问题是,我们希望能够在同一台 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 更改为 Custom。

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

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

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

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

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

这将导致功能区后置“DEVELOPMENT”,不会干扰已安装的 VSTO。

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

关于excel - 同时运行同一 Excel VSTO 加载项的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52744496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com