MSIX 打包 DotNetCore 3.0
使用 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 节点,如下所示:
<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 来进行安装我们的应用程序,同样合适很方便的。
此外,我们也可以使用它来更新我们已经发布的应用程序,感兴趣的朋友可以参考文末相关链接,这里就不做介绍了。
相关参考#
MSIX 打包 DotNetCore 3.0的更多相关文章
- 使用 MSIX 打包 DotNetCore 3.0 客户端程序
如何你希望你的 WPF 程序能够以 Windows 的保护机制保护起来,不被轻易反编译的话,那么这篇文章应该能帮到你. 介绍 MSIX 是微软于去年的 Windows 开发者日峰会 上推出的全新应用打 ...
- 创建或打开解决方案时提示"DotNetCore.1.0.1-SDK.1.0.0.Preview2-003131-x86"错误的解决方案
提示"DotNetCore.1.0.1-SDK.1.0.0.Preview2-003131-x86"错误的解决方案: 1.检查是否有C:\Program Files (x86)\d ...
- 解决 DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe 在VS2015 Update3 安装失败的问题
今天抽空升级VS2015 Update3. 在安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe 时报错了,看了错误日志 显示: 看到我标红的两个地方,那么 ...
- 无法安装 DotNetCore.1.0.0-VS2015Tools.Preview2解决方法
安装 DotNetCore.1.0.0-VS2015Tools.Preview2,已经安装vs2015update3,还是提示检测到 Visual Studio 2015 Update 3没有完全安装 ...
- [转] 安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.2出现0x80072f8a未指定的错误
原文地址:安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.2出现0x80072f8a未指定的错误 最近DotNetCore更新到了1.0.1,Azure tools ...
- 安装DotNetCore.1.0.0-VS2015Tools.Preview2失败解决方案
1.把安装文件放入非系统盘 2.命令行带参数运行: DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe SKIP_VSU_CHECK=1 或 DotNetCor ...
- 将传统 WPF 程序迁移到 DotNetCore 3.0
介绍 由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍 ...
- DotNetCore 3.0 助力 WPF 开发
DotNetCore Is AnyWhere. 前言 Visual Studio 2019 已经正式发布了,DotNetCore 3.0 的正式版也指日可待.在之前的版本中,作为一名基于微软生态的传统 ...
- vs2015 iis express启动不了及安装DotNetCore.1.0.0-VS2015Tools.Preview2失败的解决方法
直接用管理员账户打开cmd,进入exe所在的文件夹在运行命令DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1不要加引号. PS:如果 ...
随机推荐
- windows 控制台 命令行指令换行
由于屏幕较小而指令太长,在书写的时候不好阅读. 其实cmd和Linux一样可以通过特殊符号换行的: Linux 为 \ 而cmd 为 ^ 看图 这就很美观了,拯救了我的强迫症 ^_^ ...
- Laravel 引入第三方类库及自定义函数
1.新建一个目录放第三方类库 2.找到composer.json文件打开,在里面autoload 下classmap下面加入类库路径 3根目录下运行composer dumpautoload 4.使用 ...
- Laravel Artisan Tinker: The optimize Command
Laravel Artisan Tinker: The optimize Command December 7, 2016 Laravel JOHN KOSTER The optimize comma ...
- CDOJ 1256 打表+数组 统计
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- HZOJ 20190719 那一天我们许下约定(dp+组合数)
这个题目背景真的是让我想起了当年... 不说了,言归正传,这题,一眼看去30分暴力还是很好拿的,但我因为考试时的心态问题没有处理好细节爆了零. 30分暴力的普遍思路的复杂度应该是$O(nmd)$的,但 ...
- HGOI 20191029pm 题解
Promblem A 小学组 给出一个位运算操作符$\oplus \in \{or , and , xor\}$ ,和$n$个$m$维向量$a_i$,其中$a_{i,j} \in \{0,1\}$. ...
- AtCoder AGC004F Namori (图论)
题目链接 https://atcoder.jp/contests/agc004/tasks/agc004_f 题解 神仙题.. 首先考虑树的情况,树是二分图,因此假设我们对二分图进行黑白染色,那么操作 ...
- CodeForces–833B--The Bakery(线段树&&DP)
B. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...
- JavaWeb_(Struts2框架)Log4j的配置以及解决中文乱码
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- 分享代码到GitHub
1.本地安装git 2.项目文件夹右键Git bash here,弹出git命令窗口 3.输入git init,使项目加入Git管理 4.输入git add .,将项目全部内容添加到git 5.输入“ ...