【问题标题】:How to publish a Console Application that uses 3rd party references?如何发布使用 3rd 方引用的控制台应用程序?
【发布时间】:2016-09-12 15:50:45
【问题描述】:

我的问题可能看起来很具体,但实际上可能很笼统:如何发布使用 3rd 方引用的控制台应用程序?

我正在使用 Visual Studio 2015 制作一个名为 Gdx2PostgreSql 的控制台应用程序,该应用程序使用 Visual Basic 编程。该应用程序正在读取 Gdx 文件中的数据(来自 GAMS 程序的输出,www.gams.com)并将数据写入 PostgreSql 数据库。 PostgreSql 的接口由 NpgSql 处理,www.npgsql.org。 NpgSql 被引用为

\\dtu-storage\hela\Documents\Visual Studio 2015\Projects\GDX to PostgreSQL 2\packages\Npgsql.3.1.7\lib\net451\Npgsql.dll

当程序在 Visual Studio 中以 Debug 模式执行时,程序可以正常运行。

我必须能够从 CMD 窗口中的命令提示符运行程序。此外,我必须能够通过使用 GAMS 语法从 GAMS 程序生成来运行该程序

Execute 'Gdx2PostgreSql "FileName.gdx" "CaseName"';

我已发布程序并运行安装程序的安装文件。但是当我在 CMD 窗口中运行它时,我得到了错误:

'Gdx2PostgreSql' is not recognized as an internal or external command, operable program or batch file.

从我的 GAMS 程序生成时,我收到相同的错误消息。

由于相当绝望,我尝试将 Publish 文件夹中的 setup.exe 文件重命名为 Gdx2PostgreSql.exe。当我使用这个文件时,我得到:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Npgsql, Version=3.1.7.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' or one of its dependencies. The system cannot find the file specified.

即程序不知道 NpgSql。

在我看来,我需要一个包含所有需要的 EXE 文件 - 特别是因为我的程序也应该能够在其他 PC 上运行。

谁能帮我制作我的程序 Gdx2PostgreSql 函数?

最后,我应该提一下,我已经让其他程序读取 Gdx 文件并使用 NggSql 写入 PostgreSql。这些程序可以正常运行,但它们是 Windows 窗体应用程序,而不是控制台应用程序。

【问题讨论】:

  • 我要检查两件事,首先,当您在解决方案资源管理器中单击 Npgsql.dll 时,在属性窗口中尝试将本地复制设置为 true。此外,如果它确实在调试模式下运行,那么您应该能够导航到 YourConsoleApp/bin/debug 。您应该能够将这些文件复制并粘贴到其他任何地方并运行 .exe 就好了。
  • @D.Mac Npgsql.dll 有 Local=True。我已将 Gdx2PostgreSql.exe 和 Npgsql.dll 从 bin/Release 复制到安装 GAMS 的文件夹中。 (也就是说,我不是在“发布”程序。)然后它似乎在从 GAMS 程序调用时起作用。

标签: postgresql visual-studio-2015 console-application publish npgsql


【解决方案1】:

控制台应用程序与 winforms 应用程序实际上并没有什么不同——您必须将 EXE 及其依赖的任何 DLL 分发到同一目录中。正如评论中提到的,在构建程序之后,您应该能够在 bin/Debug(或 Release)下找到所需的一切。

关于为什么找不到您的Gdx2PostgreSql,这可能是路径问题 - 尝试使用绝对路径运行您的程序,或者在执行之前 cd'ing 进入 bin/Debug(或 Release)。

【讨论】:

  • 我已将 Gdx2PostgreSql.exe 和 Npgsql.dll 从 bin/Release 复制到安装 GAMS 的文件夹中。 (也就是说,我不是在“发布”该程序。)然后它似乎在从 GAMS 程序调用时起作用。
猜你喜欢
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多