寻求可调用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
相关产品推荐
相关产品推荐

