首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时运行同一Excel VSTO外接程序的多个版本

同时运行同一Excel VSTO外接程序的多个版本
EN

Stack Overflow用户
提问于 2018-10-11 00:06:33
回答 1查看 111关注 0票数 3

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

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

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

我正在考虑定制创建VSTO注册表项的脚本,以便在运行excel之前更改该项。因此,我们的VSTO外接程序将只有一个条目,并且我们将更改它的location属性以指向不同版本的外接程序。当同一个VSTO插件在不同的位置启动两个Excel实例时,您是否会看到任何潜在的问题?

EN

回答 1

Stack Overflow用户

发布于 2021-11-30 13:16:18

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

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

当我更改程序集名称,使其与部署时不同时,我不会得到任何冲突。为了避免搞砸,我添加了一个预编译事件:

代码语言:javascript
复制
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 ) )

因为它是在部署时在发行版中构建的,而我们在本地Debug中运行它。

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

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

代码语言:javascript
复制
    private void PostInitialize()
    {
    #if DEBUG
        tabRdTools.Label += " DEVELOPMENT";
        tabRdTools.Name += "Dev";
    #endif
    }

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

代码语言:javascript
复制
    public RDToolsRibbon()
        : base(Globals.Factory.GetRibbonFactory())
    {
        InitializeComponent();
        PostInitialize();
    }

基本上,开发人员在开发时(在调试模式下)将".dev“添加到程序集名称中。

这将导致色带后固定“DEVELOPMENT",不会对已安装的VSTO造成干扰。

回调:您必须手动更改程序集名称。如果您每次都将程序集名称更改为不同的名称,则可能会得到许多回显。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52744496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档