首页 文章

无法在C#项目中引用'FSharpOption<>'

提问于
浏览
6

我无法在Visual Studio 2015中针对Xamarin.Android的C#PCL项目中引用 FSharpOption<> .

这是一个video,显示了我尝试解决它的步骤 .

我收到的错误如下:

FSharpOption <>类型在未引用的程序集中定义 . 您必须添加对程序集FSharp.Core,Version = 3.7.4.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a的引用

NOTE:

我的C#项目参考FSharp.Core . 它引用了我的F#项目正在使用的相同FSharp.Core版本:

some_path\packages\FSharp.Core.4.0.0.1\lib\portable-net45+monoandroid10+monotouch10+xamarinios10\FSharp.Core.dll

Adding an App Config

我放在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功能所需步骤的指导吗?

UPDATED

我有另一个类在同一个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()) {
}

NOTE:
FSharp.Core的 using 语句似乎被忽略 .

我的viewmodel托管在Visual Studio内的一个F#项目中 .

3 回答

  • 3

    当我遇到类似的问题时,解决方案是从两个项目(C#和F#one)卸载FSharp.Core,然后再次安装它,但使用NuGet包管理器解决方案(不是单独为每个项目) .

    因此,从两者中删除FSharp.Core后,转到工具> NuGet包管理器>管理解决方案的NuGet包...

    搜索FSharp.Core,勾选要添加库的所有项目,然后选择要添加的版本 .

    这为我解决了这个问题 .

    Edit: 另一件值得检查的事情是,任何使用FSharp.Core的库实际上使用的是与您安装的库相同的版本 .

  • 2

    app.config 中更改绑定重定向后,您可能还需要删除可执行项目文件夹下的 obj 文件夹 .

    由于某些原因,过时的配置文件可以在那里闲逛并被复制到您的bin文件夹,尽管执行干净的重建 .

  • 2

    我通过将实际的DLL文件添加到我的客户端项目解决了我的问题,然后让我的客户端引用了dll .

    enter image description here

相关问题