WPF 不安装 WindowsAppSDK 使用 WinRT 功能的方法
安装 Microsoft.WindowsAppSDK 库会限制应用程序只能分发 windows 10 应用,如果自己的应用程序依然需要兼容 Win7 等旧系统,那直接采用安装 WindowsAppSDK 方法将会丧失兼容旧系统能力。本文和大家介绍无需安装 Microsoft.WindowsAppSDK 即可使用 WinRT 功能的方法,此方法可以让应用程序继续兼容旧系统,可以在应用程序内判断系统版本之后自行决定调用 WinRT 功能
本文的方法使用起来特别简单,只需要让自己的项目引用 Microsoft.Windows.SDK.NET.dll 和 WinRT.Runtime.dll 即可
例如将 Microsoft.Windows.SDK.NET.dll 和 WinRT.Runtime.dll 放在项目文件夹之外的 bin 文件夹里面,修改自己的 csproj 项目文件让其引用。或者是在 Visual Studio 里面右击项目添加引用都可以。修改之后的 csproj 项目文件大概如下
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Windows.SDK.NET">
<HintPath>..\bin\Microsoft.Windows.SDK.NET.dll</HintPath>
</Reference>
<Reference Include="WinRT.Runtime">
<HintPath>..\bin\WinRT.Runtime.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
不同的开发者将 Microsoft.Windows.SDK.NET.dll 和 WinRT.Runtime.dll 放置的地方不同,这将会导致 csproj 里的 HintPath 的路径有些差别
那接下来的问题就是如哪里找到正确的 Microsoft.Windows.SDK.NET.dll 和 WinRT.Runtime.dll 文件?这两个文件是否区分 x86 或 x64 版本?
这两个文件是从 Microsoft.WindowsAppSDK 库里面找出来的,因此咱可以通过安装 Microsoft.WindowsAppSDK 库来找到这两个文件。方法就是先创建一个新项目,在这个新项目上安装上 Microsoft.WindowsAppSDK 库,接着构建这个新项目。在新项目的构建输出,如 bin\Debug 文件夹下找到 Microsoft.Windows.SDK.NET.dll 和 WinRT.Runtime.dll 文件,取出来即可
这个专门用来获取 Microsoft.Windows.SDK.NET.dll 和 WinRT.Runtime.dll 文件的新项目的 csproj 项目文件可以是大概如下代码
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows10.0.19041</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
<PlatformTarget>x86</PlatformTarget>
<RuntimeIdentifiers>win10-x86;win10-x64</RuntimeIdentifiers>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.3.230331000" />
</ItemGroup>
</Project>
以上代码的 Microsoft.WindowsAppSDK 的版本还请大家根据具体使用的时间自行更新版本
这两个文件是不区分 x86 和 x64 的。同样也不区分 Debug 和 Release 版本
至于为什么不区分,那是因为从原理上来说这两个文件其实只是一层 COM 封装而已。对 WinRT 的调用的机制原理就是通过 COM 调用技术来调用到 WinRT 组件。但为什么很少有开发者自己定义 COM 封装去调用 WinRT 呢?其中一个原因是 WinRT 里面用到许多有趣的特性,例如异步等等,导致封装的代码不能和 Win32 那么清真
微软封装的 Microsoft.Windows.SDK.NET.dll 和 WinRT.Runtime.dll 文件就是对 WinRT 的 COM 的封装,从而让大家可以更加开森和清真的使用到 WinRT 功能。由于封装 COM 的代码也是基础的 C# 代码,这也就无视 x86 和 x64 的差别
再有一个问题是这两个文件是免费商用许可的?答案自然是肯定的。这两个文件来源于 https://github.com/microsoft/WindowsAppSDK 开源仓库,这两个文件的代码都是完全开源的,而且还是基于最友好的 MIT 协议进行开源
这就意味着如果大家想不开要改代码也是没有限制门槛,可以放心在自己的商业项目里使用,也可以魔改之后使用
WPF 不安装 WindowsAppSDK 使用 WinRT 功能的方法的更多相关文章
- Wix 安装部署教程(九) --用WPF做安装界面
经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...
- installscript类型 完成时实现推荐安装其他产品的功能
目前好多软件在安装完成时都有什么 立刻运行.打开网址.推荐安装其他工具等功能 我司领导也追时髦要求了这个功能而且要推荐多个,所以这个功能实现起来就需要自己去写代码了.陆陆续续研究了研究了好长时间,由于 ...
- NSIS:使用PassDialog插件实现密码安装(卸载)功能
原文 NSIS:使用PassDialog插件实现密码安装(卸载)功能 有时,出于特殊的需求,我们要给安装或卸载程序加一个密码,只有输入了正确的密码才可以继续.比如: 下面我们使用插件来实现安装密码: ...
- CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
.启动安装在 VirtualBox 中的 CentOS 5.5 虚拟机,点击“设备” => “安装增强功能”.这个时候你就可以看到有一个“光盘”已经挂载到 CentOS 5.5 的桌面上了.它包 ...
- redhat 6.4 安装VirtualBox自动增强功能功:unable to find the sources of your current Linux kernel
redhat 6.4 安装VirtualBox自动增强功能功能的时候提示: building the main Guest Additions module FAILED unable to find ...
- WPF中类似使用tab键功能,可以向上向下定位
原文:WPF中类似使用tab键功能,可以向上向下定位 private void tbYyrs_KeyUp(object sender, KeyEventArgs e) { UIElement elem ...
- Ubuntu 中软件的安装、卸载以及查看的方法总结
Ubuntu 中软件的安装.卸载以及查看的方法总结 博客分类: Linux UbuntuDebian配置管理CacheF# 说明:由于图形化界面方法(如Add/Remove... 和Synaptic ...
- OpenStack安装部署管理中常见问题解决方法
一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...
- WIN8 、WIN7 下IIS7.5、IIS8 的rewrite 伪静态功能设置方法
原文 WIN8 .WIN7 下IIS7.5.IIS8 的rewrite 伪静态功能设置方法 win7和win8系统都自带有iis的功能.关于IIS的安装,上一篇已经讲述,这里就不重复了. 下面说下在w ...
- 安装Sublime Text 3插件的方法:
安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手点下页面的广告吧,谢谢! 直接安装 安装Sublime text 2插件很方便,可 ...
随机推荐
- 【福利】JetBrains 全家桶永久免费使用
Jetbrains系列的IDE公认是最好的集成开发工具,但是收费且挺贵.我们以PhpStorm为例,新用户第一年需要199$,注意是$,还不是人民币,这个价格一上来肯定筛选掉一大批用户.确实好用,所以 ...
- 记录--封装一个通过js调用的全局vue组件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在使用vue项目编写的时候,不可避免的会碰到需要时js api来调用组件进行显示的情况 例如饿了么element ui 的 Noti ...
- Linunx安装wkhtmltox
1.下载wkhtmltox安装包 官网:https://wkhtmltopdf.org/downloads.html 根据系统类型选择下载wkhtmltox 环境:centos6 32位.wkhtml ...
- vue初学核心基础
一.初识vue 1.vue的使用 导入vue之后创建vue模块,el属性表示控制区域的id名称,data表示该区域内的数据 在vue中我们都是用表中模板的标准语法来传递数据 <head> ...
- SSH和SFTP是否相同
SSH和SFTP是否相同?SSH和SFTP是经典的对.在确保通信安全方面,它们交织在一起,尽管它们具有类似的功能,但它们并不是一回事.那么,它们之间有什么区别?请仔细阅读,找出答案. 什么是SSH? ...
- python爬虫等获取实时数据+Flume+Kafka+Spark Streaming+mysql+Echarts实现数据动态实时采集、分析、展示
使用爬虫等获取实时数据+Flume+Kafka+Spark Streaming+mysql+Echarts实现数据动态实时采集.分析.展示 [获取完整源码关注公众号:靠谱杨阅读人生 回复kafka获取 ...
- MySQL查询表结构信息SQL语句
一.获取某数据库下的所有数据表名 SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA ...
- HTTP与WebSocket/WebDAV
WebSocket WebDAV
- Csharp线程
CSharpe线程 目录 CSharpe线程 C#如何操作线程 Thread 1. Thread如何开启一个线程呢? 2. Thread中常见的API 3. thread的扩展封装 threadpoo ...
- #决策单调性dp,分治#LOJ 6039「雅礼集训 2017 Day5」珠宝
题目传送门 分析 观察到这个0/1背包中单个物品的体积不超过300,考虑分体积考虑. 设 \(dp[i]\) 表示容量大小为 \(i\) 的背包能获得的最大价值, \(dp[i]=\max\{dp[i ...