在包含外部库的文件夹外运行C#可执行文件

本文关键字:运行 可执行文件 文件夹 包含外 | 更新日期: 2023-09-27 18:25:09

我有一个C#程序,它使用我从互联网上下载的外部开源库,特别是openxml来创建excel文件。现在我想在没有安装此库的计算机上运行我的可执行文件。

我已经知道,通过将copy local属性设置为true,我可以让visualstudios在调试或发布文件夹中复制库,我正在这样做。

问题是,现在可执行文件可以在其他计算机上运行并生成excel文件,但可执行文件必须在保存库的调试或发布文件夹中运行。

当我尝试复制可执行文件并在文件夹外运行时,会抛出一个异常,告诉我找不到库,当在文件夹外执行可执行文件时,我如何让它找到库?

谢谢,

-Jake

在包含外部库的文件夹外运行C#可执行文件

应该有几个选项可以使用。

问题是库不在路径中。

这可能会有所帮助。"http://msdn.microsoft.com/en-us/library/vstudio/6taasyc6%28v=vs.100%29.aspx"。您只需要始终将库放在同一位置即可。

您可以将它添加到路径变量中(尽管这可能会在其他地方引起冲突)。您可以将文件夹添加到临时路径,即控制台,只要它启动。您可以将其添加到相对路径"Visual Studio:如何设置dll的路径?"

希望这能帮助

您可以通过以下几种方式实现:

  1. ILMerge可以将所有DLL合并在一起(如果DLL是C#DLL)到一个单独的可执行文件中,这样库就永远在你身边
  2. 您可以将DLL作为资源添加到项目中,然后在启动时将它们吐到本地目录中
  3. 为参考库设置目录使用存储在与主程序不同的文件夹中的参考库(dll)

另请参阅:如何将C++窗口dll合并到C#应用程序exe中?将非托管dll嵌入托管C#dll在编译的可执行文件中嵌入DLL将C++库嵌入.Net库

创建Windows Istaler

如果你想在其他机器上运行你的软件,为什么不创建一个MSI呢?。用MSI打包您的外部可执行文件。当你安装它时,你的exe和外部exe都会被提取到同一个位置,这样你就不会有任何问题。