前言:VS2022需要更新到17.8.0版本或以上,并且开发环境需要有.NET 8 SDK,可以去微软官方下载。
为了效果差异,我先创建一个.net 6环境的webapi项目
然后创建一个类库项目,并输出一条信息。这个类库项目会被.net 6项目和后面的.net 8项目引用。
在.net 6的项目里面引用类库项目,并调用输出。
.net 6程序发布以后,并在根目录下运行。发布以后,可以看到,目标文件夹里面有很多被引用的dll文件。而反编译工具基本上也都是根据dll文件来进行反编译的。
接着,咱创建一个.net 8的webapi aot程序,记得是带有AOT标记的。
该项目只有一个选项——.NET 8,说明暂时只有.net 8才支持AOT
使用这种创建的程序,多了一个http后缀的文件,可以自行研究它的功能。
在.net 8程序里面,也引用同一个类库项目,并和上面一样做个输出。
对程序进行编译和发布。发布时候需要选择目标平台,例如win-x64,否则可能会报错。当前AOT只支持x64架构。
发布以后的目录比较清爽,没有任何dll文件,就一个exe文件,可以避免被人拿dll文件去反编译了。并且双击可执行程序,可以正常运行。
针对上面的.net 6程序,为了更好地对比,我也换成同样的win-x64配置环境发布,然后再重新发布,依然可以看见发布以后文件特别多:
最后,AOT的另一个功能就是可以不依赖.net框架环境,也可以运行。所以我把它移植到另一台电脑上,另一台电脑并没有安装.net 8环境,双击可执行程序,也可以顺利运行,并且不会提示缺少.net 依赖:
有了AOT神器,就不担心被轻松反编译而导致代码泄露了。