.NET 9 SDK 中显式指定旧版 WindowsSdkPackageVersion 导致 Microsoft.Windows.SDK.NET.dll 类型无法解析怎么修复
【免费下载链接】core.NET news, announcements, release notes, and more!项目地址: https://gitcode.com/GitHub_Trending/core82/core
在 .NET 9 SDK 下构建面向 Windows 的项目时,如果通过WindowsSdkPackageVersion显式指定了旧版 Windows SDK projection 包,可能会遇到Microsoft.Windows.SDK.NET.dll中的类型全部无法解析、项目无法完成编译的情况。dotnet/core 仓库 9.0 已知问题文档的 "Windows SDK projections" 一节记录了这个现象,并给出两条修复路径:满足条件时直接删除该属性,或必须锁定旧版包时在项目文件中追加一段FrameworkReference配置。
先确认命中的是这个已知问题
文档给出的触发条件与现象:
- .NET 9 SDK 已支持 Windows SDK projection 包的 profiles;
- 如果使用
WindowsSdkPackageVersion显式指定了不带 profiles 的旧版本包(即.38之前的版本),Microsoft.Windows.SDK.NET.dll中的类型将不会有任何类型被解析。
两个前提要同时成立:项目里显式设置了WindowsSdkPackageVersion,且指定的版本在.38之前。如果项目没有这个属性,不属于该问题。
同节还列了两类现象不同的 Windows SDK projection 报错,注意不要混为一谈:
partial类型嵌套在非partial类型中时报CS0260 Missing partial modifier on declaration of type '..'(示例结果,来自文档);- 程序集名含有
-等特殊字符且存在 WinRT 泛型实例化场景时,源生成器产出的代码无法编译,出现error CS0116、error CS01514、error CS0122、error CS0118、error CS0103(示例结果,来自文档)。
如果看到的是上述两类错误,而不是"类型无法解析",则不属于本文讨论的问题。文档示例中使用的 Windows 10 OS 版本 target framework 形如net8.0-windows10.0.22000.0。
修复路径一:删除 WindowsSdkPackageVersion
适用于当初指定WindowsSdkPackageVersion只是为了拿到 .NET SDK 中尚不可用的包版本的情况。直接删除该属性即可:.NET SDK 现在自带的包版本更新,包含针对26100的版本,不再需要手动指定。
修复路径二:必须停留在旧版包时,添加 FrameworkReference 配置
适用于用WindowsSdkPackageVersion固定包版本以控制依赖、且需要停留在旧版版本的情况。把下面这段加入你的csproj或公共的props、targets文件:
<ItemGroup Condition=" '$(IncludeWindowsSDKRefFrameworkReferences)' == 'true' "> <FrameworkReference Include="Microsoft.Windows.SDK.NET.Ref" IsImplicitlyDefined="true" Pack="false" PrivateAssets="All" /> </ItemGroup>两点说明:
- 这个
ItemGroup带Condition,仅在IncludeWindowsSDKRefFrameworkReferences为true时生效; - .NET 9 SDK 会在后续更新中自动完成同样的处理,届时可以把这段临时配置移除。
修复后的验证
文档的判定标准就是现象本身:修复前Microsoft.Windows.SDK.NET.dll的类型无法解析。应用上述任一修复后,重新编译项目,确认这些类型恢复解析、项目能完成之前被阻塞的编译即可。若仍无法解析,回到触发条件核对:WindowsSdkPackageVersion指定的确实是.38之前的版本,且修复路径二中的配置放进了实际参与构建的csproj/props/targets文件。
限制
- 该问题仅由"显式指定
.38之前的包版本"触发;未显式指定版本的项目不受影响。 - 路径二中的
ItemGroup是临时绕行方案,文档明确 .NET 9 SDK 的后续更新会自动处理,升级后应移除该配置。 - 本文所有现象、条件与配置均出自 release-notes/9.0/known-issues.md 的 "Windows SDK projections" 一节,可按该文件持续跟踪 SDK 更新情况。
【免费下载链接】core.NET news, announcements, release notes, and more!项目地址: https://gitcode.com/GitHub_Trending/core82/core
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考