最近把开源项目重构并从 NET Framework 4.8 升级到了 .NET6 ,开发体验良好。尤其是发布 exe 的时候很轻松。
原本 NET Framework 4.8 发布 Exe 包的时候,需要打包一系列的 dll 文件
如图,.NET6 可以打包为一个 10MB 的单 exe 应用,非常方便 portable 版本的发布:
不过今天尝试发布为 msix 并更新到 Microsoft Store ,就遭到了背刺 :(
如下图,NT48 发布的包只需要 10 MB 左右,而 .NET6 发布的包则达到了惊人的 70 多 MB 。
我推测 .NET6 发布打包时默认以 self-contained
形式把 .NET6 运行时也打包到了应用里面。
现在搜索一圈也没找到怎么以 依赖框架
的形式发布 msix 包。
并且这个问题应该是从 NET CORE 时代一直延续至今的:
虽然能理解“为了隔离各个应用,所以给每个应用都打包好自己的运行时”这种做法,但 .NET6 作为微软自家的运行时,居然也要被隔离,不知道过几年 Windows 要是预装了 .NET6 运行时,那么微软商店中的软件是否还需要自带一份运行时呢?
话说回来,反正用户不管怎么样都要下载 70MB 的安装包了,那我干嘛不用 Electron 写桌面应用,虽然用户用着慢,但写 UI 快啊
吐槽完了,求个 star https://github.com/1Remote/PRemoteM
1
codehz 2022-06-23 12:00:04 +08:00
UWP 当然也是可以有外部依赖的(隔壁 Unigram 安装就得先装一堆依赖库
|
2
u823tg 2022-06-23 12:08:33 +08:00
貌似 wpf 现在正在进行 aot 改造着, 等一年多应该可以 aot 了
|
3
SMGdcAt4kPPQ 2022-06-23 12:42:06 +08:00
.NET 4.8 也可以部分支持 C# 11 ,修改 csproj 的 LangVersion 就行
dotnet CLI 也是可以用的 |
4
SMGdcAt4kPPQ 2022-06-23 13:04:11 +08:00 via Android
https://www.nuget.org/packages/Costura.Fody/
.NET 4.8 加上这个就可以打包成单 exe |
5
wdwwtzy 2022-06-23 13:08:35 +08:00
还真不知道 msix 的情况,或许可以考虑不打包成 msix ,直接分发 zip 压缩包 🙂
|
6
VShawn OP |
7
u823tg 2022-06-23 14:31:25 +08:00
@VShawn #6 貌似在哪看过,winforms 有 aot 的基础了。 wpf 改造下也就有 aot 基础了。也可能我记错了。
|
8
INCerry 2022-06-23 15:09:45 +08:00
我不清楚打包应该怎么取消自带运行时,但是按照 publish 来说是可以选择是否包含运行时。楼主可以试一试看看。
<SelfContained>false</SelfContained> https://docs.microsoft.com/zh-cn/dotnet/core/deploying/single-file/overview#publish-a-single-file-app---sample-project-file |
9
lower 2022-06-23 15:57:47 +08:00
你这个集成的 ssh 工具是怎么弄的?可以大概说下思路么?
|
10
clijiac 2022-06-23 17:02:55 +08:00
这个工具不错啊, 收藏了
|
11
ysc3839 2022-06-23 18:03:26 +08:00
AppX/MSIX 可以手动打包吧?好像是新建个 AppX 项目,然后设置打包目录啥的,就能只打包自己要的文件了。
|
12
netnr 2022-06-23 19:27:51 +08:00 via Android
前面看到 github 讨论说 .NET Framework 因为系统内置,维护更新太麻烦了,开源版本不会系统内置了
|
13
VShawn OP |
14
billzhuang 2022-06-24 08:20:19 +08:00 via iPhone
.net 4.8 到.net 6 可是翻天覆地的变化,羡慕楼主轻松升级。
|
15
hez2010 2022-08-13 01:33:53 +08:00 via iPad 1
dotnet publish 的时候带一个 --no-self-contained 试试
|