• 简单介绍.net core 如何实现跨平台和静态编译(写好的程序无法再被直接反编译源码)的桌面应用程序


    我之前一直都被研究如何静态编译,因为源码直接被人反编译真的是非常烦恼的事情,试过很多方式,也换过很多语言,直到我发现了这款基于.net core的开源的跨平台UI库

    Ui库官方地址:Avalonia UI

    接下来我为大家带来简单的使用教程,如果要使用此功能的话,需要有一定的wpf开发基础

    1、首先我们需要安装它的vs扩展Avalonia,如图所示

    2、安装好后重新打开VS。选择创建新项目

     

    3、简单了解创建的项目文件 

     4、然后我们就可以进行跟wpf一样的开发了。

    5、重点呢,就是编译和生成这块了。发布这块跟.net core 跨平台发布是基本一致的,选择所需要的平台,进行编译就行了。

     这样呢,基本上的跨平台程序就做好了的。

    但是呢,我们还有静态编译的发布方式,就是需要在项目中引用Microsoft.DotNet.ILCompiler

    我们可以在包管理器中进行安装。这部分如果没有静态编译的需求的话,就不需要了。因为这部分非常的麻烦,虽然引入了这款aot编译的dll之后,正常生成就行了,但是如果我们使用到了别的第三方类库,那我们就得添加第三方库的rd.xml代码

     像Avalonia这款第三方库,我们需要添加如下rd.xml才可以进行静态编译。

    1. <Directives>
    2. <Application>
    3. <!-- main app assembly provides types which needs to be reflected upon -->
    4. <Assembly Name="你项目的名称" Dynamic="Required All"></Assembly>
    5. <!-- these are needed when you show images and draw text -->
    6. <Assembly Name="Avalonia.Animation">
    7. <Type Name="Avalonia.Animation.Easings.QuadraticEaseIn" Dynamic="Required All" />
    8. <Type Name="Avalonia.Animation.Easings.QuadraticEaseOut" Dynamic="Required All" />
    9. <Type Name="Avalonia.Animation.Easings.CubicEaseOut" Dynamic="Required All" />
    10. </Assembly>
    11. <Assembly Name="Avalonia.Themes.Default" Dynamic="Required All"></Assembly>
    12. <Assembly Name="Avalonia.Visuals" Dynamic="Required All">
    13. <Type Name="Avalonia.Media.SolidColorBrush" Dynamic="Required All" />
    14. </Assembly>
    15. <!--<Assembly Name="SkiaSharp" Dynamic="Required All"></Assembly>-->
    16. <!-- To support Fluent themes trimming the final assembly we need to add this entry -->
    17. <!--<Assembly Name="Avalonia.Base" Dynamic="Required All"></Assembly>
    18. <Assembly Name="Avalonia" Dynamic="Required All"></Assembly>
    19. <Assembly Name="Avalonia.Interactivity" Dynamic="Required All"></Assembly>
    20. <Assembly Name="Avalonia.Layout" Dynamic="Required All"></Assembly>
    21. <Assembly Name="Avalonia.Markup" Dynamic="Required All"></Assembly>
    22. <Assembly Name="Avalonia.Markup.Xaml" Dynamic="Required All"></Assembly>
    23. <Assembly Name="Avalonia.Styling" Dynamic="Required All"></Assembly>
    24. <Assembly Name="Avalonia.DesktopRuntime" Dynamic="Required All"></Assembly>
    25. <Assembly Name="Avalonia.DesignerSupport" Dynamic="Required All"></Assembly>
    26. <Assembly Name="Avalonia.Dialogs" Dynamic="Required All"></Assembly>
    27. <Assembly Name="Avalonia.Input" Dynamic="Required All"></Assembly>
    28. <Assembly Name="Avalonia.OpenGL" Dynamic="Required All"></Assembly>
    29. <Assembly Name="Avalonia.Desktop" Dynamic="Required All"></Assembly>
    30. <Assembly Name="Avalonia.ReactiveUI" Dynamic="Required All"></Assembly>
    31. <Assembly Name="Avalonia.Skia" Dynamic="Required All"></Assembly>
    32. <Assembly Name="Avalonia.Win32" Dynamic="Required All"></Assembly>
    33. <Assembly Name="ReactiveUI" Dynamic="Required All"></Assembly>
    34. <Assembly Name="System.Reactive" Dynamic="Required All"></Assembly>
    35. <Assembly Name="Splat" Dynamic="Required All"></Assembly>-->
    36. <!-- Not known if and when you need these:
    37. <Assembly Name="Avalonia.Base" Dynamic="Required All"></Assembly>
    38. <Assembly Name="Avalonia" Dynamic="Required All"></Assembly>
    39. <Assembly Name="Avalonia.Interactivity" Dynamic="Required All"></Assembly>
    40. <Assembly Name="Avalonia.Layout" Dynamic="Required All"></Assembly>
    41. <Assembly Name="Avalonia.Markup" Dynamic="Required All"></Assembly>
    42. <Assembly Name="Avalonia.Markup.Xaml" Dynamic="Required All"></Assembly>
    43. <Assembly Name="Avalonia.Styling" Dynamic="Required All"></Assembly>
    44. <Assembly Name="Avalonia.DesktopRuntime" Dynamic="Required All"></Assembly>
    45. <Assembly Name="Avalonia.DesignerSupport" Dynamic="Required All"></Assembly>
    46. <Assembly Name="Avalonia.Diagnostics" Dynamic="Required All"></Assembly>
    47. <Assembly Name="Avalonia.Dialogs" Dynamic="Required All"></Assembly>
    48. <Assembly Name="Avalonia.Input" Dynamic="Required All"></Assembly>
    49. <Assembly Name="Avalonia.Logging.Serilog" Dynamic="Required All"></Assembly>
    50. <Assembly Name="Avalonia.OpenGL" Dynamic="Required All"></Assembly>
    51. <Assembly Name="Avalonia.Desktop" Dynamic="Required All"></Assembly>
    52. <Assembly Name="Avalonia.Direct2D1" Dynamic="Required All"></Assembly>
    53. <Assembly Name="Avalonia.ReactiveUI" Dynamic="Required All"></Assembly>
    54. <Assembly Name="Avalonia.Skia" Dynamic="Required All"></Assembly>
    55. <Assembly Name="Avalonia.Win32" Dynamic="Required All"></Assembly>
    56. <Assembly Name="ReactiveUI" Dynamic="Required All"></Assembly>
    57. <Assembly Name="System.Reactive" Dynamic="Required All"></Assembly>
    58. <Assembly Name="Splat" Dynamic="Required All"></Assembly>
    59. -->
    60. </Application>
    61. </Directives>

    在项目根目录中添加这个rd.xml,然后进行正常的发布编译,就行了。这样你发布的代码就是AOT静态编译了

  • 相关阅读:
    Linux防火墙Centos6的常用命令iptables
    java计算机毕业设计客户关系智能管理系统源码+mysql数据库+系统+lw文档+部署
    Python计算两个时间的时间差(工作笔记需要自取)
    Redis主从结构数据同步分析
    Worthington植物原生质体制备丨纤维素酶方案
    C++一些新的特性的理解(二)
    Lilishop 开源商城系统代码审计
    十分钟快速搭建个人网站教程(Nextjs)
    无线通信技术_Fundamentals of Wireless Communication
    【opencv图像处理】--4. 低、高通滤波,卷积和各种算子
  • 原文地址:https://blog.csdn.net/qq279202647/article/details/125440256