# .NET Core 发布EXE程序(扫盲)

.NET Core 发布EXE程序(扫盲)

  • .Net Core控制台生成exe能独立运行

    • 通过Nuget安装依赖文件(SDK)

      • Install-Package 依赖名
      • UnInstall-Package 依赖名
      • https://www.nuget.org/ 官方nuget下载依赖文件
  • .NET Core 的控制台应用默认是生成 dll 文件,而没有对应的 exe 文件。如下图所示,是在VS中编译后生成的结果

    • 其中包含一个 dll 文件,要执行该文件需要用命令行来执行:
    • $ dotnet 005.dll

将该源文件编译出 exe 文件

在VS中直接调试时,只能生成对应的 dll 文件,要生成 exe 文件则需要用命令行来进行

  • (1)、首先回到 Program.cs 文件所在路径

  • (2)、在该路径下执行命令即可生成对应的 exe 文件

      ` $   dotnet build -r win-x64 `
    
  •   ` $   dotnet build --runtime win-x64 `
    
  • (3)、生成的 exe 文件位于 bin\Debug\netcoreapp2.1\win-x64 目录下。


  • dotnet core 发布的时候,会使用很多文件,这样发给小伙伴使用的时候不是很清楚,本文告诉大家一个非官方的方法通过 warp 将多个文件打包为一个文件

  • 使用非常简单,先和之前相同的方式发布一个 dotnet core 程序,记得需要使用 --self-contained 发布

    • dotnet publish -c Release --self-contained -r win-x86
  • 这时可以在输出的文件夹 bin 的 Release\netcoreapp2.1\win-x86\publish 文件夹看到输出的文件,可以看到输出的文件很多,这时通过 Powershell 下载 warp 工具

        [Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" ; Invoke-WebRequest https://github.com/dgiagio/warp/releases/download/v0.3.0/windows-x64.warp-packer.exe -OutFile warp-packer.exe 
    
  • 也可以通过上面的方法下载

    • 下载之后将 warp-packer.exe 放在 Release\netcoreapp2.1\win-x86\publish 的上一级文件夹里面,就放在 Release\netcoreapp2.1\win-x86 文件夹
  • 可以通过下面的命令打包出一个 exe 包含里面的文件

    当前的命令行路径是 Release\netcoreapp2.1\win-x86

    • .\warp-packer --arch windows-x64 --input_dir .\publish\ --exec在publish文件夹里面运行的程序 --output 输出的.exe
      如在 Release\netcoreapp2.1\win-x86 里面的可运行程序 exe 是 lindexi.exe 我可以通过下面的代码合并里面的文件为一个 exe 文件

      • .\warp-packer --arch windows-x64 --input_dir .\publish\ --exec lindexi.exe --output lindexi.exe

同时使用这个工具还有一个好处,就是对文件进行压缩

* 限制:当前(2019年1月3日)只能发布 x64 的版本的程序,如 windows x64 和 linux x64 程序

 命令行工具现在可以通过 dotnet 工具使用 warp 发布,在使用之前先安装工具

 dotnet tool install --global dotnet-warp 

安装完成可以在输出文件夹里面执行 dotnet-warp 就可以打包为单个exe文件

使用 dotnet 命令行发布
在 dotnet core 3 preview5 支持在命令行一键打包为一个文件

这个文件包含所有的依赖和资源文件,在启动的时候将所有依赖复制到临时文件夹,然后将这些依赖加载。这个解压只会在第一次运行,之后都可以快速启动

  • dotnet publish -r win10-x64 /p:PublishSingleFile=true

新建一个控制台创建使用上面命令发布为一个 exe 文件的大小大概是 67M 左右

第一次运行需要解压文件到临时文件夹的 .net\程序集名\xx 文件夹里面,然后再运行

原理
其实 Warp 和 dotnet PublishSingleFile 都是一个自压缩包,在第一次运行会将文件解压缩到临时文件夹。如 warp 会解压缩到 C:\Users\xxx\AppData\Local\warp\packages\app.exe 文件夹,请将上面的 xxx 替换为你的用户名,将 app.exe 替换为实际的应用

引用自:https://blog.lindexi.com/post/dotnet-core-发布只有一个-exe-的方法.html

你可能感兴趣的:(C#笔札)