我正在尝试将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.Diagnostics
和Windows.Foundation.Metadata
。
当我在项目的原始UWP版本中尝试此操作时,它能够找到Metadata
,Diagnostics
和Windows.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
库的东西而作弊。但肯定有更好的方法吗?
我如何使用ApplicationData
在没有其他导入的WPF
桌面应用程序中进行跨线程数据共享?(和它与UWP
应用程序有什么不同?