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

如何在控制台应用中引用Windows.Foundation.FoundationContract解决IPropertySet问题

解决非UWP控制台项目调用UWP ApplicationData API的问题

嘿,这个坑我之前帮朋友踩过,典型的新手跨项目类型API引用失误!普通.NET控制台项目和UWP项目的运行环境、依赖体系完全不一样,直接在控制台项目里调用UWP专属的ApplicationData这类WinRT API肯定会出问题,下面给你两种靠谱的解决思路:

优先方案:改用.NET原生的本地存储API

如果你只是需要读取本地设置的功能,完全没必要硬凑UWP的API,.NET框架本身就有成熟的方案:

  • 如果你用的是传统.NET Framework控制台项目:可以用System.Configuration.ConfigurationManager读取App.config里的配置项
  • 如果是.NET Core/.NET 5+的现代控制台项目:推荐用Microsoft.Extensions.Configuration配合JSON配置文件,或者用System.IO.File直接读写本地文本文件存储设置

给你一个.NET 6+控制台项目的简单示例:

using Microsoft.Extensions.Configuration;
using System.IO;

var configBuilder = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

IConfiguration config = configBuilder.Build();
string exampleSetting = config["exampleSetting"];

特殊需求:必须使用UWP的ApplicationData API(不推荐)

如果你因为业务原因一定要在控制台项目里调用UWP的WinRT API,绝对不能手动去系统目录找Windows.Foundation.dll(你找到的NativeImages文件夹里的是运行时编译的原生镜像,根本不是开发时该引用的程序集!),正确的做法是:

  1. 要么直接新建「Windows Console App (WinUI 3)」项目,这个项目类型天生支持所有WinRT API
  2. 要么给已有的.NET 6+控制台项目安装NuGet包Microsoft.Windows.SDK.Contracts,这个包会自动帮你引入正确的WinRT合约依赖,不需要手动找任何系统文件

安装完这个NuGet包后,你原来的代码就能正常编译运行了:

string parameters = ApplicationData.Current.LocalSettings.Values["exampleSetting"] as string;

最后提醒

千万别手动引用C:\Windows\assembly里的文件,这些是系统运行时的内部文件,版本依赖复杂,不同Windows版本可能有差异,很容易导致项目在其他机器上跑不起来。优先选择和项目类型匹配的API才是正道!

内容的提问来源于stack exchange,提问作者Adrian K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:29:37