我无法引用 FSharpOption<>
在 Visual Studio 2015 中针对 Xamarin.Android 的 C# PCL 项目中。
这是一个 video这显示了我试图解决它的步骤。
我收到的错误如下:
The type
FSharpOption<>
is defined in an assembly that is not referenced. You must add a reference to assembly
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 文件与我在测试项目中使用的 app.config 文件相同,该文件是用 F# 编写的。
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()) {
}
注意:
using
FSharp.Core 的语句似乎被忽略了。我的 View 模型托管在 Visual Studio 内的 F# 项目中。
最佳答案
当我遇到类似问题时,解决方案是从两个项目(C# 和 F# 项目)中卸载 FSharp.Core,然后再次安装它,但使用 NuGet 包管理器作为解决方案(不是针对每个项目单独使用)。
因此,从两者中删除 FSharp.Core 后,转到“工具”>“NuGet 包管理器”>“管理解决方案的 NuGet 包...
在那里搜索 FSharp.Core,勾选要添加库的所有项目,然后选择要添加的版本。
那为我解决了这个问题。
编辑:另一件值得检查的事情是,任何使用 FSharp.Core 的库实际上都使用与您安装的库相同的版本。
关于f# - 无法在 C# 项目中引用 'FSharpOption<>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638418/