使用 MSIX 打包 DotNetCore 3.0 客户端程序

如何你希望你的 WPF 程序能够以 Windows 的保护机制保护起来,不被轻易反编译的话,那么这篇文章应该能帮到你。

介绍#

MSIX 是微软于去年的 Windows 开发者日峰会 上推出的全新应用打包解决方案。其目的是取代旧式的软件打包方式,可用于 Win32、WindowsForm 、 WPF 和 UWP 等应用程序,该打包方式将支持 Windows7 和 Windows8.x。并且让我们的程序不会轻易反编译。

本文,我们将尝试如何使用 MSIX 来打包我们的 DotNetCore 3.0 WPF 应用程序。

使用#

我们打开 VS2019,新建一个基于 DotNetCore 3.0 的 WPF 项目。当然,你也可以使用 CLI 来进行创建,命令为 dotnet new wpf

接着,我们在当前的解决方案中创建一个 Windows Application Packaging Project 项目,如下图所示:

然后,设置我们的项目名称,如下图所示:

最后,点击 crate 。此时会弹出一个窗口,让你选择你的程序包运行的目标版本和最低版本,这里我们按需选择即可,我的选择如下图所示:

项目创建完毕后,项目中会有如下文件:

  • xxx.pfx:程序包证书,这个对于每个发布包都是必须的;
  • Package.appxmanifest:程序包的一些信息,包括应用程序的设置、系统权限访问的控制等,双击该文件可以进行设置;

熟悉 UWP 开发的朋友应该对这个项目内容都很熟悉了,这里就不做过多解释。

右键当前项目的 Application 项,然后会有一个 Add Reference 选项卡,点击它,此时会出来一个列表,列出当前解决方案中,我们可进行打包发布的项目,如下图所示:

这里,我们就选择我们之前创建的一个 WPF 项目 WPF1,对它进行打包。

进行上述操作之后,我们可以尝试右键该项目,选择 Build 操作,如果不出意外的话,会出现如下图的错误:

由于 MSIX 目前仅支持 DotNetCore 3.0 Self-Contained 的方式进行打包,这意味发布的包不仅包含我们的应用程序,还会包含完整的 .NET Core 运行时。这种方式可能会使我们的包更大,但是更显著的优点是我们可以部署到任何机器上,无论目标机器是否安装了 .NET Core 3.0 的运行时,尤其是当你打算将你的程序通过 Microsoft Store 进行分发。所以我们需要解决上述说的问题。

右键我们的主程序项目解决方案文件 XX.csproj,在 PropertyGroup 节点下添加一个 RuntimeIdentifiers 节点,如下所示:

Copy
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF> <!--添加如下节点-->
<RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
</PropertyGroup> </Project>

修改完毕后,重新编译我们的主程序。然后再选择我们的打包程序,右键执行 Deploy,可以成功的将我们的主程序部署到我们的自己机器上。

此外,我们可以右键打包程序,点击 Store 选项卡中的 Create App Packages。如下图所示:

这里为我们的应用程序选择 x64 架构。然后执行 Create 即可。如果一切正常的话,会生成一个发布目录。会出现如下图所示的界面:

注:我们要依据我们的目标平台来选择正确的架构方式。如果执行失败,请确保你的架构方式选择正确,不要选择 Neutral 方式。

到时候,我们只需要将我们的这个发布目录发布给目标用户即可,同时,我们也可以将我们应用发布到应用商店。

总结#

众所周知,传统 WPF 程序如何直接打包发布时很容易被反编译的。我们希望我们的软件能够被保护起来,不那么被反编译,所以可以使用 MSIX 可以尝试一下。

使用 MSIX 是一种更安全有效的发布方式,能够确保我们的应用程序和客户系统更加安全。这种方式的部署能将我们的应用程序以沙箱的方式运行,所以安装和卸载都很干净,不会出现各种反三观的 流氓行为,如果我们的应用不走商店分发的话,我们也可以将我们的程序包发给用户,然后通过使用微软在应用商店提供的打包工具 MSIX Packaging Tool 来进行安装我们的应用程序,同样合适很方便的。

此外,我们也可以使用它来更新我们已经发布的应用程序,感兴趣的朋友可以参考文末相关链接,这里就不做介绍了。

相关参考#

最新文章

  1. 关闭Win10自带的 Windows Defender
  2. 百度UEditor基本使用
  3. lucene.net的一个动态更新类
  4. sprint2 项目部署+展示
  5. 一、PHP MongoDB Windows7_64位安装与配置
  6. CodePage代码,MultiByteToWideChar
  7. hadoop错误Could not obtain block blk_XXX_YYY from any node:java.io.IOException:No live nodes contain current block
  8. 登录网站爬虫(保持Cookie不变)
  9. jenkins 杀死衍生进程
  10. HTTP 错误 500.19 - Internal Server Error 0x80070005 0x80070003
  11. postgres 数据库的安装
  12. JavaScript之更改闭包内的变量值
  13. datepart in ssis
  14. CSS3笔记1
  15. python 执行sql得到字典格式数据
  16. 使用parted对大于2T的磁盘进行分区
  17. ATL Thunk机制深入分析
  18. 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程
  19. WPF UI 开源专贴
  20. 【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel

热门文章

  1. Http 数据操作
  2. html5原生js拖拽上传(golang版)
  3. 牛客训练41D最小相似度bfs
  4. 使用python 将地址链接变成二维码
  5. JavaWeb_(Struts2框架)拦截器interceptor
  6. Java_GUI小游戏--FlappyBird 橡树鸟
  7. python-pandas-1
  8. IDEA项目里Maven 的Plugins出现红线的解决方法
  9. 阿里云OSS细粒度权限控制
  10. idea如果发生@override is not allowed when implement 错误,可以在Project Structure-Modules中更改Language level,设置为6以上的。