gpt4 book ai didi

c# - 如何在 VSTO 项目中注册 UDF/RTD

转载 作者:行者123 更新时间:2023-11-30 22:40:38 27 4
gpt4 key购买 nike

全部,

这是对我的问题 here 的跟进.

我的设置:

  • Visual Studio 10
  • C#语言
  • Excel 2007+
  • Windows XP+

我想实现的是:

  • 使用自定义功能区组件和自定义任务 Pane 为 Excel 创建 VSTO 插件
  • 创建 RTD 服务器
  • 为 Excel 用户创建一些包装 =RTD() 调用的 UDF
  • 让客户通过 ClickOnce 安装插件

除了最后一个要求,我基本完成了。我遇到的唯一问题是在不使用 regasm.exe 的情况下在目标机器上注册 RTD 服务器和 UDF。我基本上希望客户确实点击一次然后忘记它,特别是因为有数百个潜在用户,所有这些用户都分布在全世界。

此外,由于他们不精通技术,我不希望他们必须手动注册 COM 组件或类似的事情。

我不关心 UDF 和 RTD 服务器是否是一个单独的项目,只要我可以通过 ClickOnce 将它们与 VSTO 插件一起包含和注册即可。

我查看了免注册 COM,但终究无法在我的 VSTO 插件中使用它。我所做的是创建第二个项目(一个 library class)并尝试导出并为 COM interop 注册它,然后将它包含到我的“主”项目中并在那里使用它:它要么不会编译(无法从程序集嵌入互操作类型 [...],因为它缺少“ImportedFromTypeLibAttribute”属性或“PrimaryInteropAssemblyAttribute”属性)或不注册。

Internet 上有大量针对我的要求的不同部分的示例,但没有完整的示例。

我是不是完全偏离了轨道?有人可以给我指出正确的方向并最好提供一些示例代码/配置吗?

干杯,车

最佳答案

在上面 Frank 提供的链接的帮助下,我最终在我的 ThisAddin 类中完成了这个:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{
throw new Exception("Failed to register for COM Interop.");
}
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.UnregisterAssembly(GetType().Assembly))
{
throw new Exception("Failed to unregister for COM Interop.");
}
}

我知道这并不理想,但至少我确定如果我的插件启动,所有 COM 对象都已注册...

关于c# - 如何在 VSTO 项目中注册 UDF/RTD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5103709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com