安装 Microsoft.WindowsAppSDK 库会限制应用程序只能分发 windows 10 应用,如果自己的应用程序依然需要兼容 Win7 等旧系统,那直接采用安装 WindowsAppSDK 方法将会丧失兼容旧系统能力。本文和大家介绍无需安装 Microsoft.WindowsAppSDK 即可使用 WinRT 功能的方法,此方法可以让应用程序继续兼容旧系统,可以在应用程序内判断系统版本之后自行决定调用 WinRT 功能

本文的方法使用起来特别简单,只需要让自己的项目引用 Microsoft.Windows.SDK.NET.dllWinRT.Runtime.dll 即可

例如将 Microsoft.Windows.SDK.NET.dllWinRT.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.dllWinRT.Runtime.dll 放置的地方不同,这将会导致 csproj 里的 HintPath 的路径有些差别

那接下来的问题就是如哪里找到正确的 Microsoft.Windows.SDK.NET.dllWinRT.Runtime.dll 文件?这两个文件是否区分 x86 或 x64 版本?

这两个文件是从 Microsoft.WindowsAppSDK 库里面找出来的,因此咱可以通过安装 Microsoft.WindowsAppSDK 库来找到这两个文件。方法就是先创建一个新项目,在这个新项目上安装上 Microsoft.WindowsAppSDK 库,接着构建这个新项目。在新项目的构建输出,如 bin\Debug 文件夹下找到 Microsoft.Windows.SDK.NET.dllWinRT.Runtime.dll 文件,取出来即可

这个专门用来获取 Microsoft.Windows.SDK.NET.dllWinRT.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.dllWinRT.Runtime.dll 文件就是对 WinRT 的 COM 的封装,从而让大家可以更加开森和清真的使用到 WinRT 功能。由于封装 COM 的代码也是基础的 C# 代码,这也就无视 x86 和 x64 的差别

再有一个问题是这两个文件是免费商用许可的?答案自然是肯定的。这两个文件来源于 https://github.com/microsoft/WindowsAppSDK 开源仓库,这两个文件的代码都是完全开源的,而且还是基于最友好的 MIT 协议进行开源

这就意味着如果大家想不开要改代码也是没有限制门槛,可以放心在自己的商业项目里使用,也可以魔改之后使用

WPF 不安装 WindowsAppSDK 使用 WinRT 功能的方法的更多相关文章

  1. Wix 安装部署教程(九) --用WPF做安装界面

    经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...

  2. installscript类型 完成时实现推荐安装其他产品的功能

    目前好多软件在安装完成时都有什么 立刻运行.打开网址.推荐安装其他工具等功能 我司领导也追时髦要求了这个功能而且要推荐多个,所以这个功能实现起来就需要自己去写代码了.陆陆续续研究了研究了好长时间,由于 ...

  3. NSIS:使用PassDialog插件实现密码安装(卸载)功能

    原文 NSIS:使用PassDialog插件实现密码安装(卸载)功能 有时,出于特殊的需求,我们要给安装或卸载程序加一个密码,只有输入了正确的密码才可以继续.比如: 下面我们使用插件来实现安装密码: ...

  4. CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能

    .启动安装在 VirtualBox 中的 CentOS 5.5 虚拟机,点击“设备” => “安装增强功能”.这个时候你就可以看到有一个“光盘”已经挂载到 CentOS 5.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 ...

  6. WPF中类似使用tab键功能,可以向上向下定位

    原文:WPF中类似使用tab键功能,可以向上向下定位 private void tbYyrs_KeyUp(object sender, KeyEventArgs e) { UIElement elem ...

  7. Ubuntu 中软件的安装、卸载以及查看的方法总结

    Ubuntu 中软件的安装.卸载以及查看的方法总结 博客分类: Linux UbuntuDebian配置管理CacheF#  说明:由于图形化界面方法(如Add/Remove... 和Synaptic ...

  8. OpenStack安装部署管理中常见问题解决方法

    一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...

  9. WIN8 、WIN7 下IIS7.5、IIS8 的rewrite 伪静态功能设置方法

    原文 WIN8 .WIN7 下IIS7.5.IIS8 的rewrite 伪静态功能设置方法 win7和win8系统都自带有iis的功能.关于IIS的安装,上一篇已经讲述,这里就不重复了. 下面说下在w ...

  10. 安装Sublime Text 3插件的方法:

    安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手点下页面的广告吧,谢谢! 直接安装 安装Sublime text 2插件很方便,可 ...

随机推荐

  1. JS(入门)

    一. 编程语言 1.1 编程 编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程.计算机程序:就是计算机所执行的一系列的指令集合,而程序全部都是用我们所掌握的语言 ...

  2. 如何在Docker容器启动时自动运行脚本

    本文分享自华为云社区<如何在Docker容器启动时自动运行脚本>,作者: 皮牙子抓饭. 如何在Docker容器启动时自动运行脚本 在使用Docker构建应用程序时,有时我们希望在启动Doc ...

  3. JAVA10进制数转45进制

    import java.util.HashMap; public class test2 { // 定义45进制数字 private static final String X45 = "0 ...

  4. KingbaseES 分区表修改字段类型

    KingbaseES普通表修改表结构请参考:KingbaseES变更表结构表重写问题 数据类型转换重写与不重写: varchar(x) 转换到 varchar(y) 当 y>=x,不需要重写. ...

  5. KingabseES例程之巧用QueryMapping解决查询硬解析问题

    什么是QueryMapping KingbaseES Query Mapping 是一种查询映射功能.有过SQL优化经历的人都知道,对于有些SQL性能问题,可能需要涉及到SQL层面的修改,这不仅麻烦, ...

  6. SqlServer的实用且高级玩法.md

    1.常见表表达式(CTEs) 如果您想要查询子查询,那就是CTEs施展身手的时候 - CTEs基本上创建了一个临时表. 使用常用表表达式(CTEs)是模块化和分解代码的好方法,与您将文章分解为几个段落 ...

  7. VK2C21A:抗干扰/抗噪/高稳定性LCD屏显示驱动,抗干扰LCD驱动段码屏芯片

    产品型号:VK2C21A/B/C/D 产品品牌:VINKA/永嘉微/永嘉微电 封装形式:SOP28/24/20/16 产品年份:新年份 原厂直销,工程服务,技术支持,价格最具优势! VK2C21A/B ...

  8. #容斥,排列组合#U138404 选数字

    题目 给定长度为\(n,n\leq 10^5\)的序列\(a,a_i,m\leq 255\),多组询问求 \[\sum_{i=l}^{r-2}\sum_{j=i+1}^{r-1}\sum_{k=j+1 ...

  9. 【直播回顾】OpenHarmony知识赋能第八期:手把手教你实现涂鸦小游戏

     OpenHarmony第八期知识赋能直播已经在9月29日圆满落幕!从9月15日起,资深OS框架开发工程师巴延兴老师于每周四进行分享,通过实现涂鸦小游戏来帮助大家全面了解ArkUI框架的应用,拓宽知识 ...

  10. Native Drawing开发指导,实现HarmonyOS基本图形和字体的绘制

      场景介绍 Native Drawing模块提供了一系列的接口用于基本图形和字体的绘制.常见的应用场景举例: ● 2D图形绘制. ● 文本绘制. 接口说明 接口名 描述 OH_Drawing_Bit ...