【问题标题】:Creating a F# PCL for Universal apps (a.k.a. Store Apps or Windows apps or WinRT apps)为通用应用程序(又名商店应用程序或 Windows 应用程序或 WinRT 应用程序)创建 F# PCL
【发布时间】:2015-06-30 00:42:50
【问题描述】:

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

我在 C# 中通过添加 C#类库(通用应用程序的可移植) 进行了尝试,它可以工作,这意味着您可以使用和生成 Windows 运行时类型如果项目是 Windows 应用程序Windows 运行时组件

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

<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile32</TargetFrameworkProfile>

并将以下内容添加到&lt;ItemGroup&gt;

<TargetPlatform Include="WindowsPhoneApp, Version=8.1" />
<TargetPlatform Include="Windows, Version=8.1" />

在这些更改之后,我能够像在 C# PCL 中一样在 F# PCL 中使用和生成 Windows 运行时类型(没有来自 F# PCL 或 C#(通用)中的 Visual Studio 的抱怨Windows 应用程序),但是当我实际运行(通用)Windows 应用程序时,当在 F# PCL 中从 C#(通用)Windows 应用程序

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

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

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

我尝试通过添加手动将此引用添加到 F# PCL 的 .fsproj 文件中

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

&lt;ItemGroup&gt;。在此之后,参考确实显示在解决方案资源管理器的 F# PCL 中,并具有以下参考属性:

但不能解决问题。也就是说,我仍然得到与以前相同的异常。

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

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

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

【问题讨论】:

  • 有什么更新吗?我还希望 F# 库支持我的 Windows 10 通用应用程序。

标签: f# msbuild windows-runtime win-universal-app


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多