net8 net9 支持Win7运行原创

最近写的WPF项目需要支持Win7系统,之前使用的是NET6,但NET7和NET8这两代做了很多性能优化,而且集合表达式[]很好用,所以尝试更新。

按照官方的说法,NET6是最后一代官方支持Win7的版本,但不代表NET789一定不支持,只是官方发现了问题不会解决了。经过测试,789这三代完全可以在Win7运行,只是会有一些小问题。

  1. 需要安装KB3063858补丁,只有1.7MB。如果是Win7新系统,一般没有这个补丁,运行NET789的程序会直接报错崩溃。但安装之后就好了。具体可以看林德熙的这篇博客

  2. 需要安装VC++运行库,这个装起来也很方便。实测只有NET9的Self-Contained程序需要安装,78是不需要的。估计是官方为了缩减自包含程序的体积,把这个运行库去掉了。

  3. 需要设置Runtime参数。如果你在Win7运行NET789的程序,会发现启动慢,并且内存占用2G左右,在网上很少有提到这个问题,并且也没有给出解决方案。
    这个问题是因为从NET7开始,.NET Runtime的WriteXorExecute安全选项默认保持打开,之前都是默认关闭的。可能是Win7系统不兼容,所以内存暴涨。只要关闭这个选项就好了。在Github的这个Issue有相关讨论。
    方法有2个,一是将环境变量设置为DOTNET_EnableWriteXorExecute=0,但这样环境变量不能随程序移动,不是很好的办法。
    二是在主项目下新建一个runtimeconfig.template.json文件,这是runtime配置的模板文件,在里面写入以下内容:

{
  "configProperties": {
    "System.Runtime.EnableWriteXorExecute": false
  }
}

这样,这个runtime配置就会在生成时写入程序,随程序移动了。注意:这个办法目前只在NET9有效!官方目前还没有把这个runtime选项添加到NET8,但已经加入milestone了,不知道什么时候才会加。

解决了这三个问题,可以在Win7完美运行。
其实也都不是很麻烦,前两个只要提前把文件下载,做到安装程序里,或者双击运行一下就好了。
最后一个只要添加一下runtimeconfig文件就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值