我对.NET桌面应用程序不太熟悉(使用Visual Studio 2005).是否可以从单个.exe文件运行整个应用程序?
是的,您可以使用ILMerge工具.
今天,在2015年,您可以使用Costura.Fody.使用它相当于将NuGet包添加到项目并重新编译.我不确定它是否适用于问题中的Visual Studio 2005,但它不是2008年.我已经在我的一些项目中使用它并且效果很好.
Fody是一个通用的Code Weaver,是免费和开源的.它的基本思想是允许对已编译的.NET代码进行后处理,以通过功能增强它.例如,日志记录可以添加到每个方法调用等.在我们的例子中,它将依赖的DLL文件打包到程序集资源中,以便它们可以在程序运行时加载,就好像它们是独立的依赖项一样.
是.在.NET中,您可以将整个应用程序封装为单个EXE文件. 只需确保您的解决方案中只有一个Windows应用程序项目(除了设置之外没有其他项目).
.NET项目创建的EXE文件不是独立的可执行文件,但它唯一的依赖是.NET运行时(除非您添加对其他DLL程序集的引用).如果您使用.NET 2.0(我推荐),则运行时会预装在较新的PC上,并且在旧机器上设置非常简单快捷(安装程序大约为23 MB).
如果您的应用程序确实需要引用其他程序集(如数据访问DLL或.NET类库DLL项目),您可以使用此处其他海报引用的工具之一将EXE和所有引用的DLL组合到单个EXE文件中.但是,传统做法只是将EXE文件与任何相关DLL一起部署为单独的文件.在.NET中,依赖DLL的部署非常简单:只需将它们放在与客户端计算机上的EXE文件相同的文件夹中,就完成了.
最好将应用程序(无论是一个文件还是多个)部署为单个文件安装程序(setup.EXE或setup.MSI)..NET附带部署项目模板,可以非常轻松地为您创建安装程序.
稍微偏离主题:您可以使用NGEN将.NET应用程序编译为本机EXE,但它仍然依赖于.NET运行时.本机编译的优点是可以预编译一些东西,但我从未见过这种微小的性能提升值得打扰的情况.
有一个名为.NET Reactor的第三方工具可以为您完成此任务.我没有使用过该工具,因此不确定它的工作情况.
我使用.NETZ .NET开源可执行文件打包程序将EXE和DLL文件打包到单个EXE文件中.以下是如何将DLL文件打包到一个文件中的命令行示例:
netz -s application.exe foo.dll bar.dll