我对.NET桌面应用程序不太熟悉(使用Visual Studio 2005).是否可以从单个.exe文件运行整个应用程序?
And*_*ykh 13
今天,在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运行时.本机编译的优点是可以预编译一些东西,但我从未见过这种微小的性能提升值得打扰的情况.
我使用.NETZ .NET开源可执行文件打包程序将EXE和DLL文件打包到单个EXE文件中.以下是如何将DLL文件打包到一个文件中的命令行示例:
netz -s application.exe foo.dll bar.dll
到了 2021 年,对此的支持已经突飞猛进。
如果您已跳转到 .NET 5(支持 Windows 窗体!),您可以创建一个甚至嵌入本机二进制文件的单个 exe 文件。您必须从命令行运行发布命令,但它将生成一个 exe,其中包含任何配置或内容文件。dotnet sdk 不需要存在于目标计算机上。
dotnet.exe publish YourProject.csproj -f net5.0 -o package/win-x64 -c Release -r win-x64 /p:PublishTrimmed=true /p:TrimMode=Link /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
一些注意事项:
PublishTrimmed可以设置为false在大量反射使用的情况下消除代码删除。TrimMode可以设置为copyused或link。更多详细信息请参见: https: //learn.microsoft.com/en-us/dotnet/core/deploying/trim-self-contained。-f指定框架版本,即net5.0等。-c为配置,通常为Release。-r是要构建的运行时,可以是win-x86、win-x64和linux-x64。ARM 也可能有选项。-o是输出文件夹。完整参考: https: //learn.microsoft.com/en-us/dotnet/core/tools/dotnet-publish
| 归档时间: | 
 | 
| 查看次数: | 22410 次 | 
| 最近记录: |