C# 部署Excel UDF

C# 部署Excel UDF,c#,excel,automation,user-defined-functions,C#,Excel,Automation,User Defined Functions,我有一个调用web服务的excel UDF。UDF代码是一个自动化插件代码,它是一个C#类库,我为它创建了一个安装程序。运行设置时,excel的toos-->addins-->automation加载项列表中不会出现对特定加载项代码的引用,并且该函数不会在公式栏中显示。我正在使用VS2008和Excel 2003 我是不是遗漏了什么?我是否应该定义Excel从中选取dll的路径,以便它指向从udf代码生成的dll?或者是否有任何安全问题需要处理?客户端计算机的安全级别设置为完全信任,但加载项未显

我有一个调用web服务的excel UDF。UDF代码是一个自动化插件代码,它是一个C#类库,我为它创建了一个安装程序。运行设置时,excel的toos-->addins-->automation加载项列表中不会出现对特定加载项代码的引用,并且该函数不会在公式栏中显示。我正在使用VS2008和Excel 2003

我是不是遗漏了什么?我是否应该定义Excel从中选取dll的路径,以便它指向从udf代码生成的dll?或者是否有任何安全问题需要处理?客户端计算机的安全级别设置为完全信任,但加载项未显示在列表中


我在这里遗漏了什么吗?

这是因为安装自动化外接程序需要在注册表中创建自定义的“CLSID{GUID}\Programmable”条目,在创建自动化外接程序时,通常通过在类中包含标记为和的方法来处理。然后,在程序集上运行RegAsm时,这些类将被注册

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

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

要纠正这种情况,必须通过另一种方法创建自己的自定义“CLSID{GUID}\Programmable”条目。通过使用安装程序包的部分,最容易做到这一点

正确处理自动化外接程序的安装包的所有步骤有些复杂。幸运的是,我有一个关于如何做到这一点的逐步解释(以及为什么会发生这种情况的更详细的描述),作为对以下问题的回答:

希望这有帮助


Mike

我按照您描述的程序进行了操作,但仍然不走运。我的GUID显示在CLSID下的注册表编辑器列表中,但dll不显示在自动加载项列表中。我不知道该说什么,只是您必须非常小心地遵循这些说明。如果这样做,您应该在注册表中看到一个“CLSID{GUID}\Programmable”条目,它是键。请确保情况是这样,如果不是这样,请尝试再次按照此处讨论的说明进行操作:@Mike GUID here可以是任何内容吗?假设我可以有这样一个GUID,{ExcelAutomationFunction},不是吗?@woddykiddy-我认为使用Visual Studio的GUID生成器的结果会是一个更好的主意!:)对不起,但我也不太清楚我是如何表示我的满意的!