【发布时间】:2011-05-23 13:31:19
【问题描述】:
有时我会创建供个人使用的小项目。因此,我只需从我的项目中提取调试目录,并在需要使用我的应用程序时运行可执行文件。我怎样才能合并所有这些文件:
到一个可执行文件中。我知道我可以将该文件夹放在我的 C 驱动器中的某个位置,并有一个可执行文件的快捷方式。我只是想知道如何做到这一点。
【问题讨论】:
标签: c# .net deployment executable
有时我会创建供个人使用的小项目。因此,我只需从我的项目中提取调试目录,并在需要使用我的应用程序时运行可执行文件。我怎样才能合并所有这些文件:
到一个可执行文件中。我知道我可以将该文件夹放在我的 C 驱动器中的某个位置,并有一个可执行文件的快捷方式。我只是想知道如何做到这一点。
【问题讨论】:
标签: c# .net deployment executable
这里有两点很重要:
您不应该分发应用程序的调试版本。始终以“发布”模式编译您的应用程序的最终版本,即您将让人们使用的版本(即使这些人只是您)。
这样做的原因有很多,很多,但最明显的一个是在“发布”模式下编译将启用编译时和运行时优化,从而允许您的代码运行明显更快。
运行应用程序实际上需要您在其中显示的文件之一,那就是.EXE 文件本身。那是您必须分发的唯一一个。其余文件仅提供调试信息并由 Visual Studio 使用。由于您可能不需要在编写应用程序后对其进行调试,因此您根本不需要这些文件。
事实上,您唯一需要分发 .EXE 文件之外的任何内容的情况是您的应用程序使用了 .DLL 库文件。它们可能是您从同一解决方案中的另一个项目自己创建的库,也可能是其他人编写的库,您正在使用这些库为自己的代码提供一些功能。
【讨论】:
您是否尝试仅将 exe 文件复制到单独的目录并运行该 exe?您的应用程序不需要运行屏幕截图中列出的其他 3 个文件。
【讨论】:
您不需要合并整个文件夹,您只需将一个文件“ConsoleApplication26.exe”移动到您喜欢的任何地方并自行愉快地运行它。其他文件仅包含在 Visual Studio IDE 中调试程序时使用的信息。
【讨论】:
在这种特定情况下,您只需要 .exe 文件,因为其余部分包含调试信息等。
但一般来说 dll 文件可以放在全局程序集缓存(或 GAC)中。 MSDN article on the GAC 这应该 - 如 cmets 中所述 - 由安装程序处理,但这是避免将 dll 留在程序文件夹中的方法。正如 Cody 所提到的,通常将它们留在程序文件夹中会更好。
如果您有图像或文本文件之类的资源,则可以通过在 Visual Studio 中将它们设置为嵌入资源来将它们嵌入到可执行文件中。
然后它们可以作为正在执行的程序集中的流进行访问(this.GetType().Assembly.GetManifestResourceStream(name) 其中名称是默认命名空间“.”文件名。如果您想了解嵌入资源的名称,可以参考 GetManifestResourceNames 方法。
但包含资源也意味着您必须重写一些资源加载以使用资源流,因此需要一些额外的工作。
【讨论】: