如何在控制台应用中引用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文件夹里的是运行时编译的原生镜像,根本不是开发时该引用的程序集!),正确的做法是:
- 要么直接新建「Windows Console App (WinUI 3)」项目,这个项目类型天生支持所有WinRT API
- 要么给已有的.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
相关产品推荐
相关产品推荐

