为通用应用程序(又称商店应用程序、Windows应用程序或WinRT应用程序)创建F#PCL

为通用应用程序(又称商店应用程序、Windows应用程序或WinRT应用程序)创建F#PCL,f#,msbuild,windows-runtime,win-universal-app,F#,Msbuild,Windows Runtime,Win Universal App,自Visual Studio 2013 Update 2以来,可以创建可移植类库(PCL),只要它们只针对Windows 8.1和Windows Phone 8.1,而没有其他目标,就可以引用Windows运行时类型(以前不可能) 我在C#中尝试了这一点,添加了一个C#类库(可移植用于通用应用程序),它可以工作,这意味着您可以像使用Windows应用程序或Windows运行时组件一样使用和生成Windows运行时类型 由于F#也支持PCLs,Windows 8.1和Windows Phone 8

自Visual Studio 2013 Update 2以来,可以创建可移植类库(PCL),只要它们只针对Windows 8.1和Windows Phone 8.1,而没有其他目标,就可以引用Windows运行时类型(以前不可能)

我在C#中尝试了这一点,添加了一个C#类库(可移植用于通用应用程序),它可以工作,这意味着您可以像使用Windows应用程序或Windows运行时组件一样使用和生成Windows运行时类型

由于F#也支持PCLs,Windows 8.1和Windows Phone 8.1是受支持的目标,因此我希望通过F#PCLs实现同样的目标(如果可能的话)。虽然Visual Studio 2013 Update 4不提供创建仅针对Windows 8.1和Windows Phone 8.1的F#PCL,但可以修改F#PCL的.fsproj文件,使C#PCL的.csproj文件与使用Visual Studio创建的目标相匹配。这需要将XML元素更改为以下内容:

<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile32</TargetFrameworkProfile>
v4.6
简介32
并将以下内容添加到


在这些更改之后,我能够像在C#PCL中一样在F#PCL中使用和生成Windows运行时类型(在F#PCL或C#(通用)Windows应用程序中没有Visual Studio的投诉),但是当我实际运行(通用)时当使用Windows运行时类型的函数从C#(通用)Windows应用程序在F#PCL中调用时,我遇到以下异常

在中发生“System.IO.FileNotFoundException”类型的异常 [应用程序名].exe,但未在用户代码中处理

其他信息:无法加载文件或程序集“Windows,版本=255.255.255.255,区域性=中性,PublicKeyToken=null”或一个 它的依赖性。系统找不到指定的文件

当我在VisualStudio的解决方案资源管理器中检查引用时,C#PCL会显示一个名为Windows的引用,而F#PCL中缺少该引用。该引用的引用属性如下所示:

我尝试通过添加

<Reference Include="C:\Program Files (x86)\Microsoft SDKs\Portable\v12.0\110C4FEFF2BA61C0746933A9ED6E248D\Windows.winmd" />

。在此之后,引用确实会显示在解决方案资源管理器的F#PCL中,并具有以下引用属性:

但这并不能解决问题。也就是说,我仍然得到和以前一样的异常

我还尝试通过VisualStudio解决方案资源管理器的上下文菜单复制和粘贴Windows引用,但它显示错误消息

您知道如何正确地将Windows引用添加到F#PCL中吗?这真是太棒了,因为这将使几乎完全用F#编写(通用)Windows应用程序成为可能!如果您知道这是不可能的,那么您能解释一下是什么阻止了这一点吗?


编辑:改进了异常消息的格式

您正在创建一个可移植类库。F#不支持windows应用商店应用程序,因此在这种情况下使用F#的唯一方法是从C#调用它。如果你成功了,你将是第一个。

有什么更新吗?我还想让F#库支持我的Windows 10通用应用程序。
<Reference Include="C:\Program Files (x86)\Microsoft SDKs\Portable\v12.0\110C4FEFF2BA61C0746933A9ED6E248D\Windows.winmd" />