Excel C#自动化加载项:UDF名称已消失

时间:2014-10-31 22:05:37

标签: c# excel com automation add-in

我使用C#和Visual Studio 2010为客户构建了一个Excel 2010加载项。没有UI要求,只有可从工作表和VBA调用的UDF。相同的DLL包含自动化加载项(用于工作表函数)和VSTO COM加载项(用于提供对加载项函数的VBA访问)。它有32位和64位版本,我还为它构建了一个WiX安装程序(MSI),也是32位和64位版本。

这方面的来源多种多样,主要是在StackOverflow上(参见this的例子)但是在我发出的最后一个版本(大约在2014年9月27日)之前它一直很好。从那时起,我所做的唯一改变就是从使用基于pfx的代码签名文件转换为基于.snk的强名称密钥(出于原因,我不会因为它们是问题的外围因素而进入,无论如何我已经恢复使用PFX代码签名)。该加载项使用其他类库DLL,这些DLL是VS2010解决方案的一部分,并在安装程序中提供。 WiX项目没有任何改变。

最近我构建并发送了另一个版本,因为对其中一个包含的DLL进行了微小的更改。客户(使用Excel 2010 32位)报告在安装后,Excel无法再在“插入函数向导”中看到UDF名称,如果将它们键入到单元格中,则只评估为#NAME?。如果他们恢复到我发送的先前安装程序,那仍然有效。

我在自己的开发机器(Excel 2010 64位)上尝试了新的64位安装程序并看到了相同的效果。但是,如果我在同一台机器上重建VS2010中的解决方案,Excel可以再次看到这些名称。 (无论是从Visual Studio内部还是外部运行Excel)。通过安装程序(或修复)卸载/重新安装 - 名称再次出现。我已经尝试在VS2010重建之前和之后执行注册表的图像,但所有似乎都改变的是从安装目录到构建目录的文件的位置。 DLL文件本身(以及所有GUID,TLB等)都完全相同。仍然可以通过COM加载项从VBA调用UDF。

我无法发布代码,因为有太多,所以我的下一步是使用相同的原则构建一个最小的加载项和安装程序,但只有一个UDF,没有额外的DLL,看看是否这样问题是可重复的。如果它也有问题我会在这里发布。与此同时,任何人都可以提供一个线索,了解可能导致这种情况的原因是什么? Excel使用什么机制来访问加载的自动化加载项中的函数名?

0 个答案:

没有答案