在Windows WPF中使用ApplicationData与UWP

时间:2016-10-14 16:09:33

标签: c# .net wpf visual-studio-2015

半重要背景

我正在尝试将UWP项目更改为Windows桌面应用程序,以便我可以使用完整的.NET Framework 4.5.2。我的解决方案还包含第二个项目 - Windows运行时组件 - 用于操作后台任务。这些后台任务写入ApplicationData,以便具有GUI的主项目可以使用该信息。我已将主要项目设为Windows应用程序而非UWP,但仍存在一个问题:

问题

ApplicationData.Current.LocalSettings.Values的任何引用,例如

ApplicationData.Current.LocalSettings.Values.Keys.Contains(myDataIndex) 

导致以下错误:

  

错误CS0012 类型' IPropertySet'在未引用的程序集中定义。您必须添加对程序集的引用    ' Windows.Foundation.FoundationContract,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = null,ContentType = WindowsRuntime'。 ProjectName C:\ Users \ MyUserName \ Documents \ Visual Studio 2015 \ Projects \ ProjectName \ ProjectName \ MainWindow.xaml.cs

因此,出于某种原因,VS对IPropertySet的内容感到困惑。

我试过......

不幸的是,参考管理器中Windows.Foundation下的命名空间列表中的Assemblies->Framework没有任何内容。

好的,所以它可能已经在某处了,对吧......?我只是尝试using所需的命名空间。但是,我的项目找不到此Windows.Foundation.FoundationContract,因为我的项目不允许

using Windows.Foundation.FoundationContract

虽然找到了Windows.Foundation.DiagnosticsWindows.Foundation.Metadata

当我在项目的原始UWP版本中尝试此操作时,它能够找到MetadataDiagnosticsWindows.Foundation.Collections。 (奇怪的是,我的Windows应用程序无法找到的IPropertySet界面实际位于Windows.Foundation.Collections)。

这让我认为Windows.Foundation.Collections在Windows应用程序使用的.NET Framework中不可用,并且仅在the UWP .NET Core ...中?但如果情况确实如此,为什么VS仍然知道ApplicationData.Current.LocalSettings.Values是否无法使用?{0}好像我在这里遗漏了别的东西。

更新

看起来我只需要导入

C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd

this answer修复参考问题。

(奇怪的是,我还必须删除对另一条路径上的另一个Windows.winmd文件的引用。我认为这是我尝试导入其他内容的结果。)

真实问题

好的,我让它成功了,但它似乎就像我通过导入UWP库的东西而作弊。但肯定有更好的方法吗?

TL; DR

如何使用ApplicationData在没有其他导入的WPF桌面应用程序中进行跨线程数据共享?(和它与UWP应用程序有什么不同?

0 个答案:

没有答案