如何在包含第三方DLL文件的同时部署C#应用程序?

Wil*_*lem 10 c# deployment dll clickonce

首先,我对部署知之甚少.我希望我的问题有道理.

我需要将C#应用程序安装/部署到许多桌面.它需要第三方DLL文件:一个C++库("lpsolve55.dll",对于那些感兴趣的人,它是一个免费的MIP/LP解算器,请参阅lpsolve.sourceforge.net/5.5/).我通过以下方式在我的代码中使用它:

    [DllImport("lpsolve55.dll", SetLastError = true)]
    public static extern bool add_column(int lp, double[] column);
Run Code Online (Sandbox Code Playgroud)

为了测试,我已经手动将.dll文件复制到了project\bin\release,它工作正常.

我的问题:我需要一个应用程序的安装程序,它将管理.dll也将安装.我正在考虑ClickOnce部署,因为我使用的是Visual C#2008 Express Edition,但任何不太昂贵的解决方案都可以.

你有什么建议?

Oli*_*ver 11

只需将您的DLL添加到Visual Studio中的项目.

  • 右键单击Solution Viewer中的项目
  • 选择添加 - 现有项目
  • 浏览到DLL并单击"添加" "添加"按钮旁边的小箭头,然后单击" 添加为链接"
  • 在解决方案查看器中选择您的DLL
  • 右键单击它并选择"属性"
  • 构建操作设置为内容
  • 如果较新,请将" 复制到输出目录"设置为" 复制

现在,您的文件将自动复制到调试或发布文件夹中.

对于部署,您可以向解决方案添加安装项目.将第一个项目的输出添加到安装项目时,DLL将自动添加到安装程序中.

但是一个设置项目是一个全新的领域.所以,如果你遇到它,就开始使用它并提出一个新问题.

  • 这适用于DLL文件.但是,默认情况下不适用于例如XML文件,因为它们将被标记为"数据文件"("发布状态"列),因此在安装期间不会复制到ClickOnce应用程序的安装目录(请参阅*[A.deploy文件未部署] XML文件](http://stackoverflow.com/questions/2344083/)*).修复方法是将"数据文件"更改为"包含". (2认同)

Fem*_*ref 2

如果 ClickOnce 能够携带该 DLL 文件并将其复制到应用程序文件夹,我会使用它。如果它可以检查系统(system32 文件夹)上是否存在 DLL 文件并使用它,那就更好了,这样您就不会在目标计算机上有多个版本的二进制文件。