我们有一个内部工具,允许用户配置和启动他们的Excel会话。例如,他们可以选择我们的Excel插件的特定版本,不同的环境变量等。一些用户甚至同时启动使用不同插件版本的两个不同的Excel会话。
我们希望允许用户选择不同版本的Excel VSTO外接程序。现在,该工具执行一个批处理脚本,该脚本在运行Excel之前设置适当的注册表项。理想情况下,它们应该能够同时运行不同的版本。这有可能吗?
一种选择是使用不同的名称发布VSTO外接程序的不同版本,然后选择要在Excel启动时以编程方式加载的正确版本。我不确定如何实现这一点,但这并不理想,因为所有版本都会出现在Excel的COM外接程序列表中。
我正在考虑定制创建VSTO注册表项的脚本,以便在运行excel之前更改该项。因此,我们的VSTO外接程序将只有一个条目,并且我们将更改它的location属性以指向不同版本的外接程序。当同一个VSTO插件在不同的位置启动两个Excel实例时,您是否会看到任何潜在的问题?
发布于 2021-11-30 13:16:18
我想我找到了解决这个问题的“解决办法”。不是特别漂亮,但到目前为止它是有效的。
我的问题是,我们希望能够安装VSTO,并在同一台PC上进行开发(从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 ) )因为它是在部署时在发行版中构建的,而我们在本地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造成干扰。
回调:您必须手动更改程序集名称。如果您每次都将程序集名称更改为不同的名称,则可能会得到许多回显。
https://stackoverflow.com/questions/52744496
复制相似问题