部署Excel UDF

San*_*ndy 3 c# excel automation user-defined-functions

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

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

我在这里错过了什么吗?

Mik*_*lum 6

发生这种情况是因为安装自动化加载项要求在注册表中创建自定义"CLSID {GUID}\Programmable"条目,在创建自动化加载项时,通常通过包含使用ComRegisterFunctionAttributeComUnregisterFunctionAttribute标记的方法来处理在你班上.然后在程序集上运行RegAsm时注册这些类.

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

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

要解决此问题,您必须通过其他方式创建自己的自定义"CLSID {GUID}\Programmable"条目.最简单的方法是使用安装程序包的注册表编辑器部分.

正确处理自动化加载项的安装程序包的所有步骤有点复杂.幸运的是,我逐步解释了如何执行此操作(以及对其发生原因的更详细描述)作为问题的答案:如何在安装的VB.NET中编写用于Excel的COM Server并在自动化服务器列表中注册.

希望这可以帮助!

麦克风