C# 如何使用安装程序部署类库(dll或tbl文件)

C# 如何使用安装程序部署类库(dll或tbl文件),c#,.net,vba,dll,deployment,C#,.net,Vba,Dll,Deployment,我在Visual Studio上使用.Net Framework(VB.Net)开发了一个新的(小型)类,并在VBA Excel上进行了一次引用以执行任务。它在我的机器上运行得很好,所以这里真正的问题是在客户机的机器上部署这个类 当我在Visual Studio上进行构建时,我选择了“注册COM互操作”,因此它创建了一个.dll和.tbs文件。我想我可以在VBA上引用这些文件,一切都会很好,但并不是那么简单。我必须先在系统上注册dll,然后才能使用它,VisualStudio会在构建时自动注册

我在Visual Studio上使用.Net Framework(VB.Net)开发了一个新的(小型)类,并在VBA Excel上进行了一次引用以执行任务。它在我的机器上运行得很好,所以这里真正的问题是在客户机的机器上部署这个类

当我在Visual Studio上进行构建时,我选择了“注册COM互操作”,因此它创建了一个.dll和.tbs文件。我想我可以在VBA上引用这些文件,一切都会很好,但并不是那么简单。我必须先在系统上注册dll,然后才能使用它,VisualStudio会在构建时自动注册

问题是,我如何制作一个普通的安装程序,只将那些dll和tbl文件安装到任何人的机器上?文件必须保留在已知文件夹中,以便我可以在VBA上引用它们,但windows注册表必须知道它们存在

到目前为止我知道什么:

  • 在生成时,Visual Studio使用Regasm.exe注册dll;我 可以使用bat文件调用regasm.exe,但这不是一个选项 因为我必须引用它,每个客户都可以 有不同的.Net Framework版本,所以我无法知道 它的完整路径

  • regsvr32.exe也无法运行,因为我们需要管理员权限,并且
    客户没有

  • 我可以使用ClickOnce,但它是一个类库,所以发布选项 不存在

这里我有一些参考资料,但我还没有找到一个好的解决方案

更新1 似乎在寄存器中安装的唯一方法是通过regasm.exe或regsvr32,它们都需要提升的命令提示符(具有管理员权限),而客户端没有这一点

我猜解决方案是使用COM组件的免注册激活,这样就不需要更新注册表或在GAC中放置程序集。以下是参考资料:

更新2 我已经找到了这个答案,我觉得我真的很接近一个解决方案:

问题是,我开发的类正在使用另一个类,PdfSharp。当我注销dll并尝试再次注册(通过regasm.exe)时,我的VBA宏不是在创建对象时出错,而是在执行类的函数时出错,表示找不到PdfSharp

这个问题的解决方案并没有提到任何关于使用第三方库的问题,我认为my.dll也会带来pdfsharp.dll


有什么想法吗?我很快就能解决这个问题。

您是否尝试过使用Install Shield Limited Edition打包您的应用程序?它是免费的。

我放弃了在没有管理员权限的机器上安装DLL的尝试,因此我在Visual Studio上开发了一个控制台应用程序,并在VBA上通过Shell命令运行它,它工作得非常出色


我将把它设置为正确答案,因为它解决了我的问题,但我找不到一种方法通过安装程序在其他机器上部署dll

我建议您将.net framework版本.dll包含到安装目录中,然后运行RegAsm来注册itHello,peakpeak!在提示符下使用RegAsm不是一个选项,因为我不知道客户端的.Net Framework的版本以获取其RegAsm完整路径。我正在寻找一种方法,通过设置来实现这一点。一个安装DLL的简单设置,通过Visual Studio Correction创建:文件扩展名不是tbs,而是.tlb(类型库)查看此博客:这似乎是一个很好的解决方法。我将尝试创建一个新的项目(控制台应用程序,也许…一个我可以用ClickOnce发布的项目),并在其中包含我的类,选中“注册COM互操作”,希望dll的注册在安装时进行,而不是在构建时进行。我将尝试一下,稍后在这里设置结果。非常感谢。我使用的是Visual Studio 2017,在这个版本中,似乎安装屏蔽LE不再可用=/@RafaelPacheco您必须在2015年手动安装该插件以及更新版本。我已经安装了该插件,但我无法使其正常工作。我试图将程序集添加到向导设置中,但它只是解压缩了我添加的文件,还请求了管理员权限,这是我必须避免的。您能帮助我如何通过安装向导安装DLL吗?