C# 添加.NET EXE作为COM互操作的VBA引用(在Excel中)

C# 添加.NET EXE作为COM互操作的VBA引用(在Excel中),c#,.net,excel,vba,com,C#,.net,Excel,Vba,Com,当我的C#项目是可执行的形式时,如何在Excel(VBA)中使用它 在Visual Studio中,如果转到项目设置并将“输出类型”更改为“类库”,则可以在Excel VBA中成功添加对项目的引用(通过浏览“引用”部分中的DLL) 但是,当我的“输出类型”设置为“Windows应用程序”时,如果我试图将引用(在Excel VBA中)添加到新生成的EXE文件中,我将收到以下错误: 无法添加对指定文件的引用 如何在Excel VBA中引用.NET EXE (我使用exe而不是DLL的目的是使我的应用

当我的C#项目是可执行的形式时,如何在Excel(VBA)中使用它

在Visual Studio中,如果转到项目设置并将“输出类型”更改为“类库”,则可以在Excel VBA中成功添加对项目的引用(通过浏览“引用”部分中的DLL)

但是,当我的“输出类型”设置为“Windows应用程序”时,如果我试图将引用(在Excel VBA中)添加到新生成的EXE文件中,我将收到以下错误:

无法添加对指定文件的引用

如何在Excel VBA中引用.NET EXE


(我使用exe而不是DLL的目的是使我的应用程序既可以用作Windows应用程序,也可以用作COM对象)

在不知道确切细节的情况下,我只是猜测DLL会导出Excel所需的函数。EXE通常不导出任何函数

NET的好处在于,您可以轻松创建模块化应用程序。那么,为什么不将核心功能放入DLL并创建一个可以使用该功能的应用程序呢


通过这种方式,您可以使用VBA中的DLL,并且仍然有一个可以独立使用的应用程序。

在不知道确切细节的情况下,我只是猜测DLL会导出Excel所需的函数。EXE通常不导出任何函数

NET的好处在于,您可以轻松创建模块化应用程序。那么,为什么不将核心功能放入DLL并创建一个可以使用该功能的应用程序呢


这样,您就可以使用VBA中的DLL,并且仍然可以独立使用应用程序。

谢谢您的回答。我不确定,但他声称你可以引用一个.Net可执行文件,就好像它是一个dll一样。如果可能的话,我宁愿不部署两个单独的项目。如果我只发送一个exe,那会更干净。你可以在任何其他.NET项目中添加任何.NET程序集作为引用,这是真的。NET不关心它是否是扩展名为.exe或.dll或.blurb的程序集,只要它是.NET程序集即可。但这与在ExcelVBA中使用.NETDLL有很大不同!知道了。我似乎记得VBA可以引用VB6 EXE,但在.NET VBA通信中可能无法实现类似的功能。实际上,.NET项目属性的程序集信息中有一个选项,允许您设置“使程序集COM可见”。此选项也可用于Windows应用程序,但实际上可能仅适用于DLL。要引用VB6 EXE,必须将其编译为“ActiveX可执行文件”,实际上是进程外COM服务器,您可以在.Net中执行此操作,但其笨重且没有Thorsten建议的通用程序集和卫星.Net EXE那么好。谢谢您的建议-现在我将部署一个单独的DLL,但将来将考虑将其共享到一个代码库中。谢谢您的回答。我不确定,但他声称你可以引用一个.Net可执行文件,就好像它是一个dll一样。如果可能的话,我宁愿不部署两个单独的项目。如果我只发送一个exe,那会更干净。你可以在任何其他.NET项目中添加任何.NET程序集作为引用,这是真的。NET不关心它是否是扩展名为.exe或.dll或.blurb的程序集,只要它是.NET程序集即可。但这与在ExcelVBA中使用.NETDLL有很大不同!知道了。我似乎记得VBA可以引用VB6 EXE,但在.NET VBA通信中可能无法实现类似的功能。实际上,.NET项目属性的程序集信息中有一个选项,允许您设置“使程序集COM可见”。此选项也可用于Windows应用程序,但实际上可能仅适用于DLL。要引用VB6 EXE,必须将其编译为“ActiveX可执行文件”,实际上是进程外COM服务器,您可以在.Net中执行此操作,但其笨重且没有Thorsten建议的通用程序集和卫星.Net EXE那么好。谢谢您的建议-现在我将部署一个单独的DLL,但将来将考虑将其共享到一个代码库中。