You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求可调用WinRT API的C#控制台应用模板及报错解决方案

解决C#控制台应用调用WinRT API的常见错误

三个NuGet包的区别与选择

  • Microsoft.Windows.SDK.Contracts:旧版API合约包,适配.NET Framework和早期.NET Core,现在已逐步被CsWinRT替代,仅适合维护旧项目。
  • Microsoft.Windows.SDK.NET.Ref:Windows SDK的.NET元数据引用包,提供WinRT API的类型定义,通常和CsWinRT配合使用,需对应具体Windows版本(如10.0.22621.0对应Win11 22H2)。
  • Microsoft.Windows.CsWinRT:官方推荐的WinRT互操作工具,负责生成.NET可直接调用的WinRT API绑定,是当前开发的标准方案,会自动处理依赖的SDK引用。

解决错误CS0246和CS0234的步骤

1. 创建正确的项目

使用.NET 6及以上版本的控制台应用(推荐.NET 8),新版.NET对WinRT的支持更完善。

2. 安装正确的NuGet包

仅需安装Microsoft.Windows.CsWinRT即可,它会自动引入所需的SDK依赖。如需指定特定Windows版本的API,可额外安装对应版本的Microsoft.Windows.SDK.NET.Ref。

3. 配置项目文件

修改.csproj文件,指定Windows目标版本(以.NET 8为例):

<PropertyGroup>
  <TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
  <UseWindowsForms>false</UseWindowsForms>
  <UseWPF>false</UseWPF>
  <!-- 可选:仅生成需要的命名空间绑定,减少项目体积 -->
  <CsWinRTIncludes>Windows.Storage.Streams</CsWinRTIncludes>
</PropertyGroup>

若无需特定版本,也可使用net8.0-windows,自动适配最低支持的Windows版本。

4. 编写正确的代码

添加using指令简化代码,避免全限定名:

using Windows.Storage.Streams;

var stream = new InMemoryRandomAccessStream();
Console.WriteLine("流对象创建成功");

常见问题说明

  • 错误CS0234出现的原因:未指定正确的Windows目标版本,或使用的SDK包版本过低,导致Windows.Storage命名空间未被正确引入。通过CsWinRT+指定目标版本即可解决。
  • 不要混用三个NuGet包,优先使用CsWinRT方案,保证API兼容性和调用效率。

内容的提问来源于stack exchange,提问作者Tom Huntington

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:46:16