【发布时间】:2026-01-23 19:40:02
【问题描述】:
我无法在 Visual Studio 2015 中针对 Xamarin.Android 的 C# PCL 项目中引用 FSharpOption<>。
这是一个video,它显示了我尝试解决它的步骤。
我收到的错误如下:
FSharpOption<>类型在未引用的程序集中定义。您必须添加对程序集的引用
FSharp.Core, Version=3.7.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
注意:
我的 C# 项目确实引用了 FSharp.Core。它引用了我的 F# 项目正在使用的相同 FSharp.Core 版本:
some_path\packages\FSharp.Core.4.0.0.1\lib\portable-net45+monoandroid10+monotouch10+xamarinios10\FSharp.Core.dll
添加应用配置
我放置在 Android 客户端项目中的 app.config 文件与我在测试项目中使用的用 F# 编写的 app.config 文件相同。
app.config 如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a"
culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-999.999.999.999" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
谁能指导我在我的 C# 项目中引用 FSharp.Core 功能所需的步骤?
更新
我有另一个类在同一个 C# 项目中成功引用了 FSharp.Core:
static class Utility
{
public static bool IsSome(this FSharpOption<string> option) => FSharpOption<string>.get_IsSome(option);
public static bool IsNone(this FSharpOption<string> option) => FSharpOption<string>.get_IsNone(option);
}
上面的代码似乎不会导致任何编译错误。同样,此文件与我的另一个确实会导致错误的文件位于同一项目中。
导致错误的代码如下:
using Microsoft.FSharp.Core;
// . . .
if (_viewModel.FamilySummary.IsSome()) {
}
注意:
FSharp.Core 的 using 语句似乎被忽略了。
我的视图模型托管在 Visual Studio 内的 F# 项目中。
【问题讨论】:
-
您可能已经这样做了,但您是否尝试过清理然后重建?此外,如果您可以控制 F# 代码,您可能完全可以通过使用
Option.toObj来处理您从 C# 中使用的函数来完全避免该问题。它将string option实例更改为string,其中None变为null。 -
有例子说明如何使用吗?我在网上搜索了规范,找不到代码sn-p。
-
它是 F# 4 的一部分,所以不幸的是还没有它的文档(这很荒谬)。我能找到的最接近示例的是an earlier answer of mine。这真的很简单,IMO。
-
刚刚将一个视频链接到我的帖子,显示问题和我删除文件夹。
标签: f#