首页/新闻资讯/正文详情

WinUI(microsoft-ui-xaml)构建版本实战指南:一个版本号从 packages.config 到 global.json 的完整生命周期

发布时间:2026/9/25 2:43:49 来源:云帆数科 栏目:资讯中心
WinUI(microsoft-ui-xaml)构建版本实战指南:一个版本号从 packages.config 到 global.json 的完整生命周期
WinUImicrosoft-ui-xaml构建版本实战指南一个版本号从 packages.config 到 global.json 的完整生命周期【免费下载链接】microsoft-ui-xamlWinUI: a modern UI framework with a rich set of controls and styles to build dynamic and high-performing Windows applications.项目地址: https://gitcode.com/GitHub_Trending/mi/microsoft-ui-xaml改过 WinUI 仓库microsoft-ui-xaml依赖版本却在编译期撞上 Version mismatch 类报错吗这个仓库的构建版本体系本质是一条写 → 读 → 校验 → 生效的流水线版本号在包清单里声明、由聚合文件读取派生、在构建早期被强制校验最终落到 C# 与 C 项目身上。理解这条流水线做 WinUI 版本升级或排查 WinUI 构建失败时Windows SDK 相关约束从哪里来、该改哪个文件都能一次说清。版本号写在哪里中央清单、分架构清单与产品程序集清单C 侧依赖统一声明在仓库根目录的中央清单 packages.config关键条目包括Microsoft.Windows.SDK.cpp当前 10.0.22621.755C 项目使用的 Windows SDK NuGet 形态Microsoft.Windows.SDK.Contracts10.0.17763.1000语言投影元数据行内注释明确写着 fixed at RS5 (WinAppSDK downlevel limit)Microsoft.Windows.CsWinRT2.1.1C#/WinRT 运行时Microsoft.Web.WebView21.0.3719.77以及 TAEF 测试框架、WIL、MUXCustomBuildTasks、MSBuildCache、MSIX 构建工具等。⚠️ 文件头部的注释直接点出了同步义务——这是改一个版本要动多个文件的源头!-- NOTE: Several of the versions in this file must be kept in sync with properties in eng\versions.props --Windows SDK 本身有两种分发方式MSI 安装落在C:\Program Files (x86)\Windows KitsNuGet 形态则还原到%RepoRoot%\packages\Microsoft.Windows.SDK.cpp。仓库构建以后者为准工具链用最新 SDK但最低支持版本另有约束见下文校验环节。分架构清单 packages.x86.config、packages.x64.config、packages.arm64.config 各自只声明一个架构特定包package idMicrosoft.Windows.SDK.cpp.x64 version10.0.22621.755 /三个文件的版本必须与中央清单中的架构无关版本一致否则会被构建期检查拦下。另外两份恢复清单容易被忽略controls/dev/dll/packages.configMicrosoft.WinUI 产品程序集自己的包清单含与中央清单同版本的 WebView2 引用src/BuildTools.sln构建工具链的 NuGet 恢复清单。实操提示升级 Windows SDK 时packages.config 与三份分架构文件共 4 个文件要同时改若产品程序集受影响别忘了同步 controls/dev/dll 下的清单。版本号读在哪里eng/Versions.props 如何聚合包文件并派生构建属性eng/Versions.props 的思路与多数仓库相反它不在几十个工程文件里找版本号而是在构建时反向读取包文件。MSBuild 表达式先载入packages.config、packages.$(Platform).config与 eng/Version.Details.xml 三份文件的文本内容——按当前$(Platform)选分架构文件找不到就回退到 x86 文件——再用正则把各包版本抽成 MSBuild 属性PackagesConfigContents$([System.IO.File]::ReadAllText($(PackagesConfigFile)))/PackagesConfigContents MicrosoftCsWinRTVersion$([System.Text.RegularExpressions.Regex]::Match($(PackagesConfigContents), Microsoft.Windows.CsWinRT.*?version(.*?)).Groups[1].Value)/MicrosoftCsWinRTVersion好处是版本只在包文件一处维护构建脚本与工程文件全部通过属性间接引用手工同步成本降到最低。从这些原始版本号出发Versions.props 派生出一批影响全仓库的关键属性属性取值来源作用PackageTargetPlatformVersion取 SDK.cpp 版本号、裁掉最后一段后缀再补.0全仓库默认WindowsTargetPlatformVersionWindowsAppSdkTargetPlatformVersion固定10.0.17763.0RS5WinAppSDK 最低目标版本WindowsAppSdkTargetFrameworkMonikernet6.0-windows10.0.17763.0产品程序集投影 TFM为兼容性钉在 .NET 6SamplesTargetFrameworkMonikernet8.0-windows10.0.17763.0示例应用 TFM刻意与产品解耦dotNetSdkChannel9.0.3xxinit 流程安装的 .NET SDK 通道Net8TargetingPackVersion8.0.28统一钉住 .NET 8 目标包MicrosoftWindowsSDKNetRefPackVersionSuffixOverride38SDK.NET.Ref 元数据包补丁号后缀派生规则里有两处值得注意产品程序集为何钉 net6.0文件注释说明这是兼容考虑——该属性控制Microsoft.WinUI.dllCSWinRT 投影程序集面向的 .NET 版本不能轻动示例应用为何单独上 net8.0.NET 6 已停止支持示例需要更新运行时才能使用required成员、init-only setter 等较新的 C# 特性。另外文件里有一组条件块OSS公开构建会把 Foundation、IXP、Base 等传输包版本固定为 last-known-good 值即IsInternalWinUIBuild不为 true 的分支保证公开克隆可复现构建。实操提示想看构建实际解析出的版本设置DEBUG_BUILD属性即可——Versions.props 会把提取到的每个版本值打印到构建日志。构建期怎么校验版本一致性检查点与 RS5 最低目标护栏ValidatePackageVersionRetrieval 的两类检查点Versions.props 定义了ValidatePackageVersionRetrieval目标挂在Build;CoreCompile;Midl;ResolveAssemblyReferences之前失败即让构建在早期阶段直接停住。它做两类检查提取完整性任一关键属性为空报Unable to determine version for package ...说明对应包文件缺失或格式被破坏跨文件一致性架构特定版与架构无关版的Microsoft.Windows.SDK.cpp必须一致否则报Version mismatch between arch-specific and arch-neutral Microsoft.Windows.SDK.cppCSWinRT、WebView2 在packages.config与eng/Versions.props中的版本必须一致否则报Version mismatch ... between packages.config and versions.props。这正是改一个版本要连改几个文件背后的机制只改一边构建会带着明确报错早失败而不是留下一段静默的版本漂移。RS5 护栏与 Light-up 例外放行工具链偏好最新 Windows SDK10.0.22621.x但所有 WinUI 二进制的最低支持锁定在 Windows 10 1809RS5对应NTDDI_WIN10_RS5、UAP 契约 v7.0、10.0.17763.0。该约束由 dxaml/Xaml.Cpp.Targets 与 eng/lightup.targets 强制执行默认情况下语言投影元数据只取自Microsoft.Windows.SDK.Contracts还原目录下的 10.0.17763.1000 契约 winmd——这就是中央清单里该包版本被固定为 10.0.17763.1000 的原因WindowsTargetPlatformMinVersion也因此默认取 10.0.17763.0。唯一的绕行开关是XamlLightup项目属性。面向 19H1 引入的 Light-up 特性例如自动隐藏滚动条对应 10.0.18632.0 / UAP v8.0时项目可设置XamlLightuptrue让代码面向当前 Windows SDK 的元数据。lightup.targets 中的每个 PropertyGroup 与 Target 都带$(XamlLightup)!true条件——属性为 true 时才跳过最低目标的强制处理该文件由根目录 Directory.Build.targets 无条件导入所以每个项目都能感知这个开关但默认关闭。文档同时强调要谨慎使用并只放在明确标识为 light-up 代码的独立源文件中。实操提示遇到元数据或最低目标版本相关报错先核对中央清单中 SDK.Contracts 版本与 eng/Versions.props 是否一致再确认涉事项目是否误设了XamlLightup。版本怎么生效C# 项目落到具体 .NET 与 Windows SDK 版本的路径TFM 一行同时选定 .NET 与 Windows SDK 版本C# 应用示例应用、XCG 等通过 csproj 的 TFM 一次选定两个版本TargetFrameworknet8.0-windows10.0.17763.0/TargetFramework8 表示 .NET 810.0.17763.0即 RS5 最低目标。示例应用统一使用eng/Versions.props中的SamplesTargetFrameworkMoniker。FrameworkReference 覆盖 SDK.NET.Ref一条全局导入链TFM 中的 SDK 版本可以被FrameworkReference项覆盖。本仓库不需要每个 csproj 各写一遍根目录 Directory.Build.targets 被仓库内所有项目隐式导入其中一行Import Projecteng\sdkconfig.targets /引入 eng/sdkconfig.targets。该文件先移除 .NET SDK 自带的隐式Microsoft.Windows.SDK.NET.Ref.NET 9 起更名Microsoft.Windows.SDK.NET.Ref.Windows所以两个名字都移除再显式包含钉住版本FrameworkReference RemoveMicrosoft.Windows.SDK.NET.Ref;Microsoft.Windows.SDK.NET.Ref.Windows / FrameworkReference IncludeMicrosoft.Windows.SDK.NET.Ref TargetingPackVersion$(TargetPlatformVersion.TrimEnd(0))$(MicrosoftWindowsSDKNetRefPackVersionSuffixOverride) ... /版本号由TargetPlatformVersion去掉尾部 0 加上下缀拼成当前即 10.0.17763.38后缀随仓库演进变化。同一文件还压掉了 NU1505 警告.NET SDK 自带一份隐式 SDK.NET.Ref显式覆盖会派生重复的 PackageDownload 条目——该告警只是信息性的Remove/Include 配对才保证运行时真正使用被钉住的版本。钉住 .NET 8 目标包防全新克隆还原失败一个隐蔽的漂移源.NET 8 目标包Microsoft.NETCore.App.Ref等从不被显式引用补丁版本由 SDK 自带的KnownFrameworkReference表决定而 SDK 是按通道9.0.3xx而非精确版本安装的不同贡献者、不同时间跑 init 得到的补丁各不相同。OSS 构建又从 shine-oss 源恢复这些包该源只有显式发布过的版本——补丁不钉住全新克隆就会还原失败。因此 sdkconfig.targets 把整个 .NET 8 包族targeting、runtime、apphost、crossgen2、ILCompiler统一钉到Net8TargetingPackVersion当前 8.0.28且条件刻意限定在 .NET 8v8.0上net9.0 项目继续使用各自的包。global.json 与包源拓扑SDK 怎么装、包从哪里来init 流程init.cmd里的下载脚本只决定机器上装了什么真正固定 SDK 选择的是 global.jsonsdk: { version: 9.0.313, rollForward: latestMajor, allowPrerelease: true }文件内注释说明策略version应始终设为当前 .NET 9 SDKrollForward允许在已下载更高版本时向前滚动但 init 指定的版本始终被尊重较新的 SDK 也能产出 .NET 9 应用。msbuild-sdks段声明两个 SDKMicrosoft.Build.NoTargets供只需 binplace 等构建操作、不需要真正 .NET 的 SDK 风格项目与Microsoft.WinAppSDK.EngCommon供 Maestro 管理包与依赖。包恢复拓扑由 NuGet.config 定死唯一的远端主源是WinUI.DependenciesAzure DevOps 源。配置注释近乎铁律DONT ADD NEW FEEDS TO THIS LIST——新依赖应设为该源的上游源upstream由 Azure DevOps 代为引用/缓存或直接把 nupkg 推送到主源另有一个本地目录源add keypackagestore valuepackagestore /由于 Azure DevOps 的上游源机制只支持 Azure DevOps 或公共源仓库保留本地packagestore目录开发者可把 nupkg 直接放进去测试不必推送远端显著加速内循环迭代用途见 PackageStore/readme.md。实操提示示例应用构建出的 SDK 元数据版本不对查eng/sdkconfig.targets的拼版逻辑与 Versions.props 的下缀值包恢复失败先确认主源上是否真有该显式版本。一条命令升级版本updateIxp、updateCswinrt 与 updateWebview2 脚本的分工️ 手工改多个文件最容易漏scripts/ 目录提供了一组一条命令改到位的脚本cmd 都是 ps1 的薄封装直接跑 cmd 即可scripts/updateIxp.cmd / scripts/updateIxp.ps1更新 Interactive ExperiencesIXP包版本改动 eng/Version.Details.xml 中 IXP 传输包条目的版本示例/测试应用使用的 IXP、Foundation 版本正出自该文件scripts/updateCswinrt.cmd / scripts/updateCswinrt.ps1更新 CSWinRT 版本同步修改packages.config的Microsoft.Windows.CsWinRT条目、eng/Versions.props的MicrosoftCsWinRTPackageVersion属性以及perf\scenarios\build\PackageVersions.props和Samples\WinUIGallery\standalone.propsscripts/updateWebview2.cmd / scripts/updateWebview2.ps1更新 WebView2 SDK 与 Edge 版本改动eng/Versions.props的 SDK 包版本、controls/dev/dll/packages.config的Microsoft.Web.WebView2条目、测试宿主 packages.config 以及 Edge 依赖 nuspec 中的 Edge 版本流程见 controls/dev/WebView2/WebView2-update.md。实操提示高频依赖升级先问一句有没有 update 脚本没有脚本的依赖记住最小同步集是中央清单 eng/Versions.props 中的对应属性。WinUI 构建失败排查速查表场景对应要改的文件场景要改的文件 / 要跑的脚本升级 Windows SDKMicrosoft.Windows.SDK.cpppackages.config 三份分架构 config共 4 个文件升级 CSWinRT跑 scripts/updateCswinrt.cmd升级 WebView2跑 scripts/updateWebview2.cmd升级 IXP / Foundation 传输包跑 scripts/updateIxp.cmd改 eng/Version.Details.xml调整示例应用的 .NET / Windows SDK 版本eng/Versions.props 中SamplesTargetFrameworkMoniker调整 Windows SDK 元数据包SDK.NET.Ref补丁eng/Versions.props 中MicrosoftWindowsSDKNetRefPackVersionSuffixOverride调整 .NET 8 目标包版本eng/Versions.props 中Net8TargetingPackVersion固定构建所用 .NET SDKglobal.json 的 sdk 段编写新特性 Light-up 代码对应项目定义XamlLightuptrue代码放入独立 light-up 文件本地测试一个 nupkg放入 PackageStore/ 目录本地 packagestore 源实操提示做 WinUI 版本升级前先对照这张表找行——动手前定位文件改到一半才不会慌。一句话收束在 WinUI 的构建版本体系里packages.config是 C 依赖的唯一事实来源eng/Versions.props是聚合与校验的中枢eng/sdkconfig.targets与global.json是 .NET 和 Windows SDK 版本最终落地的执行点——任何一次版本号变更先想清楚它处在写、读、校验、生效的哪一环再决定要动哪些文件。【免费下载链接】microsoft-ui-xamlWinUI: a modern UI framework with a rich set of controls and styles to build dynamic and high-performing Windows applications.项目地址: https://gitcode.com/GitHub_Trending/mi/microsoft-ui-xaml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

使用 jc 解析 ifconfig 输出:跨平台网络接口信息转 JSON 实战指南
使用 jc 解析 ifconfig 输出:跨平台网络接口信息转 JSON 实战指南

开发工具 【免费下载链接】jc CLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.… · 2026/9/25 2:43:49

@voltagent/internal 内部工具包全解:VoltAgent 多包架构下的共享类型、流转换与安全工具实战指南
@voltagent/internal 内部工具包全解:VoltAgent 多包架构下的共享类型、流转换与安全工具实战指南

人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆 【免费下载链接】voltagent AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework 项目地址: https://gitcode.com/gh_mirrors/vo/voltagent 点击查看 免费下载 导… · 2026/9/25 2:43:49

Pyro 因果效应推断实战:CEVAE(Causal Effect VAE)从理论到代码
Pyro 因果效应推断实战:CEVAE(Causal Effect VAE)从理论到代码

人工智能机器学习深度学习概率编程 【免费下载链接】pyro Deep universal probabilistic programming with Python and PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pyro 点击查看 免费下载 本篇技术指南围绕 Pyro 官方的 CEVAE 示例教程(tut… · 2026/9/25 2:43:49

AI辅助RTL设计:从可综合到可实现的PPA闭环实践
AI辅助RTL设计:从可综合到可实现的PPA闭环实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:22:15

ESP32-S3驱动RGB屏花屏与撕裂:从PSRAM带宽到Bounce Buffer优化
ESP32-S3驱动RGB屏花屏与撕裂:从PSRAM带宽到Bounce Buffer优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:22:15

ABAQUS在航天折纸结构展开仿真中的关键技术解析
ABAQUS在航天折纸结构展开仿真中的关键技术解析

1. 项目背景与工程价值折纸结构在航天器设计领域正引发一场静悄悄的革命。传统航天器受限于运载火箭整流罩尺寸,大型构件如太阳能帆板、天线反射面等往往需要复杂的展开机构。而基于折纸数学原理的可展开结构,能够实现高达90%的体积压缩比,同… · 2026/9/25 4:22:15

基于STM32的智能除湿衣柜控制系统:硬件原理、代码与仿真全解析
基于STM32的智能除湿衣柜控制系统:硬件原理、代码与仿真全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:22:15

EEPC国际会议投稿策略与能源技术创新
EEPC国际会议投稿策略与能源技术创新

1. 会议背景与核心价值能源工程与污染治理国际学术会议(EEPC)作为跨学科交流平台,自创办以来始终聚焦"双碳"目标下的技术创新路径。2026年第二届会议将延续"技术落地为导向"的办会理念,特别强化了三个维度的价… · 2026/9/25 4:22:15

OpenClaw 定时任务配置详解:Crontab 发布脚本与日志监控的 TaoToken 接入实践
OpenClaw 定时任务配置详解:Crontab 发布脚本与日志监控的 TaoToken 接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:22:09

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码