gpt4 book ai didi

f# - FSharp.Data 缺少方法异常

转载 作者:行者123 更新时间:2023-12-03 00:31:17 25 4
gpt4 key购买 nike

我正在尝试解决预编译的 F# Azure 函数中的MissingMethodException。当我从 FSharp.Data.CssSelectorExtensions 调用扩展方法时抛出异常。

该函数在 .Net Framework 4.6.2 类库中定义。我正在使用当前版本的 FSharp.Core (4.2.3) 和 FSharp.Data (2.3.3)。 (我已经尝试了两者的旧版本,但问题仍然存在。)我已经根据此类问题的标准指南添加了 FSharp.Core 的绑定(bind)重定向。代码编译干净,但执行时失败。如果我尝试直接将扩展方法作为简单的静态方法调用,它也会失败。

任何有关如何摆脱此异常的指导将不胜感激!

函数代码

module httpfunc

open System.Net
open System.Net.Http
open Microsoft.Azure.WebJobs.Host
open FSharp.Data
open FSharp.Data.CssSelectorExtensions

let Run(req: HttpRequestMessage, log: TraceWriter) =
async {
let doc = HtmlDocument.Load("https://google.com")
let node = doc.CssSelect("div.ctr-p") // <-- method is missing
return req.CreateResponse(HttpStatusCode.OK)
} |> Async.RunSynchronously

异常消息

 mscorlib: Exception while executing function: Functions.httpfunc. 
mscorlib: Exception has been thrown by the target of an invocation.
fsfuncs: Method not found: 'Microsoft.FSharp.Collections.FSharpList`1<FSharp.Data.HtmlNode> CssSelectorExtensions.CssSelect(FSharp.Data.HtmlDocument, System.String)'.

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.4.1.0" newVersion="4.4.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="FSharp.Core" version="4.2.3" targetFramework="net462" />
<package id="FSharp.Data" version="2.3.3" targetFramework="net462" />
...
</packages>

.fsproj

<Project ToolsVersion="15.0" ... />
<PropertyGroup>
<RootNamespace>fsfuncs</RootNamespace>
<AssemblyName>fsfuncs</AssemblyName>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<TargetFSharpCoreVersion>4.4.1.0</TargetFSharpCoreVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Name>fsfuncs</Name>
</PropertyGroup>
...
</Project>

编辑

根据 Fyodor Soikin 的建议,我确定正在加载多个版本的 FSharp.Core.dll:一个来自 GAC,一个来自 NuGet 包文件夹。

Two versions of FSharp.Core.dll are loaded.

最佳答案

Azure Functions 背后的执行引擎已加载 FSharp.Core.dll (因为它依赖于 F# 编译器服务来运行 F# 脚本),我认为您将始终获得 的版本execution engine's app.config 指定的 FSharp.Core.dll ,即 4.4.0.0。

我可能会遗漏一些东西,但我认为你最好的机会是让你的函数使用版本 4.4.0.0。您可以尝试删除显式的 FSharp.Core 引用吗?这样,运行时应该仅加载(已预加载的)FSharp.Core 版本。

关于f# - FSharp.Data 缺少方法异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45886056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com