【问题标题】:Compile to a stand-alone executable (.exe) in Visual Studio在 Visual Studio 中编译为独立的可执行文件 (.exe)
【发布时间】:2011-01-03 08:28:51
【问题描述】:

如何在 Visual Studio 中制作独立的 exe。它只是一个简单的控制台应用程序,我认为用户不会喜欢安装一个微型控制台应用程序。我使用 Visual Studio 命令提示符编译了一个简单的 cpp 文件。即使没有安装 .NET 框架,exe 也能工作吗?我使用了本机 C++ 代码。

【问题讨论】:

标签: c# c++ visual-studio executable console-application


【解决方案1】:

在您的项目文件夹中,它们是一个 bin 文件夹。在您的 bin 文件夹中,有 2 个文件夹,一个 Release 和一个 Debug。对于您完善的 .exe,您需要进入您的 Release 文件夹。

我不太确定你问的是不是这个

【讨论】:

  • 这对我也有用,真不敢相信我需要多长时间才能找到它。
  • 请注意,如果尚未构建,则必须通过选择 Build > Configuration Manager 下的 Release 选项来构建 Release 版本。
  • 如果你问我有点隐藏
【解决方案2】:

任何使用托管环境的东西(包括用 C# 和 VB.NET 编写的任何东西)都需要 .NET 框架。在这种情况下,您可以简单地重新分发您的 .EXE,但如果他们还没有相应的框架,则需要安装相应的框架。

【讨论】:

  • 我可以使用 C++/CLI 或原生 C++ 将其编译为 exe 吗?
  • 无论如何它都会编译成exe。但是如果你尝试运行它,如果没有安装 .NET,它会返回一个错误。
  • 我很确定本机、非托管 C++ 与 .net 无关。您可能可以安全地部署它,而不必担心依赖关系。
  • 您可以使用非托管 C++ 来避免 .NET 运行时依赖,但根据 Visual Studio 的版本,用户可能需要适当的 Visual Studio 运行时 DLL(除非您完全静态链接,这并不总是100% 容易做到正确。)
【解决方案3】:

如果我理解正确,是的,你可以,但不能在 Visual Studio 下(据我所知)。 要强制编译器生成一个真正的、独立的可执行文件(这意味着您可以像使用任何其他语言一样使用 C#),您可以使用程序 mkbundle(与 Mono 一起提供)。这会将您的 C# 应用程序编译为真正的、无依赖关系的可执行文件。

互联网上有很多关于此的误解。它并没有像某些人所说的那样违背 .net 框架的目的,因为如果你一开始没有使用这些特性,你怎么会失去 .net 框架的未来特性呢?而且,当您将更新发布到您的应用程序时,在构建安装程序之前通过 mkbundle 处理器运行它并不是一件难事。让您的应用程序以本机速度运行还有一个速度优势(因为现在它是本机的)。

在 C++ 或 Delphi 中,您拥有相同的系统,但没有中间 MSIL 层。因此,如果您使用命名空间或源文件(在 Delphi 下称为单元),那么它会被编译并包含在您的最终二进制文件中。所以你的最终二进制文件会更大(阅读:真实应用程序的“正常”大小)。您在 .net 中使用的框架部分也是如此,这些也包含在您的应用程序中。但是,智能链接确实减少了很多。

希望对你有帮助!

【讨论】:

    【解决方案4】:

    我同意@Marlon。当您使用 Release 配置编译 C# 项目时,您会在项目的“bin/Release”文件夹中找到应用程序的可执行文件。这应该适用于简单的应用程序。

    但是,如果您的应用程序对某些外部 dll 有任何依赖关系,我建议您使用 VisualStudio 创建一个 SetupProject。这样做,项目向导将找到您的应用程序的所有依赖项并将它们(库)添加到安装文件夹中。最后,您所要做的就是在用户计算机上运行设置并安装您的软件。

    【讨论】:

    • 这条评论似乎不适用于 2019 年的 dotnet core 用户:它是 bin/Debugbin 中的 .dll /发布目录
    【解决方案5】:

    我在按原样部署用 C# 制作的小型控制台应用程序时从来没有遇到过问题。您可能遇到的唯一问题是对 .NET 框架的依赖,但即便如此,这也不应该是一个大问题。您可以尝试使用框架的 2.0 版本,它应该已经在大多数 PC 上。

    使用本机、非托管 C++,您不应该对 .NET 框架有任何依赖,因此您确实应该是安全的。只需获取可执行文件和任何随附文件(如果有的话)并按原样部署它们;如果您不想安装它们,则无需安装它们。

    【讨论】:

      【解决方案6】:

      您可以在主 dll 中嵌入所有 dll。见:Embedding DLLs in a compiled executable

      【讨论】:

        【解决方案7】:

        我认为不可能按照提问者的要求通过将所有项目文件合并到一个 .exe 中来避免 dll 地狱。

        框架问题是一个红鲱鱼。出现的问题是,当您有多个项目依赖于一个库时,它是一个 PITA 来保持库同步。每次库更改时,所有依赖它且未更新的 .exe 都会死得很惨。

        像一种反应那样告诉人们学习 C 是傲慢和无知的。

        【讨论】:

          猜你喜欢
          • 2011-02-27
          • 2010-12-20
          • 2021-10-31
          • 2011-05-26
          • 2012-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多