部署Excel UDF

时间:2010-01-22 13:11:58

标签: c# excel automation user-defined-functions

我有一个调用Web服务的excel UDF。 UDF代码是一个自动化插件代码,它是一个C#类库,我为它创建了一个安装程序。当我运行设置时,在toos - > addins - >自动化插件excel列表中不会出现对特定插件代码的引用,并且该功能在公式栏中没有出现。我正在使用VS 2008和Excel 2003。

我在这里遗漏了什么吗?我应该定义Excel必须从某个东西中选择dll的路径,以便它指向从udf代码生成的dll吗?或者是否有任何安全问题需要处理?客户端计算机的安全级别设置为“完全信任”,但插件不会出现在列表中。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:6)

这是因为安装自动化加载项要求在注册表中创建自定义“CLSID {GUID} \ Programmable”条目,在创建自动化加载项时,通常通过包含标记为你班上的 ComRegisterFunctionAttribute ComUnregisterFunctionAttribute。然后在程序集上运行RegAsm时注册这些类。

但是,在使用Visual Studio安装程序包时,会静静地忽略ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute。发生这种情况是因为安装项目使用/ regfile开关运行RegAsm,以生成包含所有必需注册表项的.reg文件。这是.reg文件,然后在客户端站点运行.msi包时使用。问题是当RegAsm通过/ regfile开关运行时,生成的.reg文件不包含由用户定义的寄存器函数(例如,用ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute标记的那些)进行的任何注册表更新。

因此,您的自定义“CLSID {GUID} \ Programmable”注册表项未创建,因此您的自动化加载项未显示在自动化加载项列表中。

要解决此问题,您必须通过其他方式创建自己的自定义“CLSID {GUID} \ Programmable”条目。最简单的方法是使用安装程序包的Registry Editor部分。

正确处理自动化加载项的安装程序包的所有步骤有点复杂。幸运的是,我逐步解释了如何执行此操作(以及对其发生原因的更详细描述)作为问题的答案:How to get COM Server for Excel written in VB.NET installed and registered in Automation Servers list

希望这有帮助!

麦克