1、用VS新建一個.Net Core 命令行程序,程序里面寫什么都行,我的是這樣的
2、打開程序包控制台,或者使用PowerShell等可以執行dotnet命令的工具,把你的.Net 程序發布(編譯)出來,win-x86 是 保證產生的這一堆文件中有.exe文件
dotnet publish -c Release --self-contained -r win-x86
執行指令后,就會在這里多一個publish文件夾,publish文件夾里面有各種dll和別的亂七八糟的文件以及一個Generate.exe文件,雙擊這個exe就能執行程序,但我們不想給這么一大堆東西給別人用,所以下面要把publish文件夾整合成1個exe文件
3、獲取warp-packer.exe這個小工具
可以使用PowerShell獲取,也可以到官網 獲取,PowerShell獲取的指令為,OutFile為獲取后文件放哪,下面的指令是放到當前打開PowerShell的目錄下
[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
4、確保warp-packer.exe和publish文件夾在同一文件夾下,在這個文件夾下(即win-x86文件夾下)PowerShell執行指令,指令大致意思是把當前目錄下的publish文件夾下的所有文件整合起來,其中,publish文件夾下的可執行文件為GenerateCsFile.exe,輸出文件為當前目錄下的gcf.exe(這個名字隨便取)
.\warp-packer --arch windows-x64 --input_dir .\publish\ --exec GenerateCsFile.exe --output gcf.exe
指令執行后就會產生gcf.exe文件了,由於是發布文件夾生成的文件,所以只要拿着這個gcf.exe到別的機器(可運行x86程序的機器)上,就可以執行,無需任何別的文件
P.S. 如果確定運行這個exe的目標機器上安裝了.net core runtime的,也可以使用這個命令編譯到一個文件夾中,這樣產生的文件大小比較小(dotnet publish指令會把依賴的所有dll都拉進文件夾中),對比了一下publish整合出來的exe大小為26.2M,這種產生的exe大小只有1.45M
dotnet build --runtime win-x64
最后,大家可能會問“我每次打包exe都要這么走一遭,那不是很麻煩“,馬上給自己的dotnet安裝這個小工具,VS程序包控制台運行
dotnet tool install --global dotnet-warp
就可以直接在PowerShell運行dotnet-warp來打包啦(好像有點代價,這種方式產生的exe似乎還會再大一點--29.1M)
參考自lindexi的博客