当前位置: 首页 > 知识库问答 >
问题:

FSharp。数据丢失方法异常

顾炎彬
2023-03-14

我试图解决预编译的F#Azure函数中的MissingMethodException。从FSharp调用扩展方法时引发异常。数据css选择扩展。

该函数是在一个函数中定义的。Net框架4.6。2.班级图书馆。我正在使用当前版本的FSharp。堆芯(4.2.3)和FSharp。数据(2.3.3)。(我尝试了这两个版本的旧版本,但问题仍然存在。)我为FSharp添加了绑定重定向。根据这类问题的标准指南进行核心测试。代码编译得很干净,但执行时失败。如果我试图以简单的静态方法直接调用扩展方法,它也会失败。

任何关于我如何摆脱这个例外的指导都将不胜感激!

功能代码

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)'.

应用程序。配置

<?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>

包装。配置

<?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包文件夹。

共有1个答案

太叔高义
2023-03-14

Azure Functions背后的执行引擎已经加载了FSharp。Core.dll(因为它依赖于F#编译器服务来运行你的F#脚本),我认为你总是会得到FSharp的版本。由执行引擎的app.config指定的Core.dll,4.4.0.0。

我可能遗漏了一些东西,但我认为您最好的机会是让您的函数使用版本4.4。0.0. 您可以尝试删除显式FSharp吗。核心参考?这样,运行时应该只加载(已经预加载)版本的FSharp。核心

 类似资料:
  • 我对使用PrimeFaces 3.4.1和JSF 2.1.6的dataTable有以下问题。第一次加载页面时,数据表中充满了数据库中的数据,但每当在页面上执行操作(编辑链接、数据表排序或过滤)时,数据表就会丢失其数据。DataTable包含来自此类的元素: 在dataTable上执行操作后进行调试时,我们只在envioDatasujeto字段上保留数据,元素上的其他所有数据都会丢失。 这是xhtm

  • 本文向大家介绍vuex页面刷新后数据丢失的方法,包括了vuex页面刷新后数据丢失的方法的使用技巧和注意事项,需要的朋友参考一下 1. 原因 (1)js代码是运行在内存中的,代码运行时的所有变量、函数都是保存在内存中。 (2)刷新页面,以前申请的内存被释放,重新加载脚本代码,变量要重新赋值。 (3)要想刷新后数据不丢失就必须把数据存储在外部,例如:Local Storage、Session Stor

  • 我正在使用DSS签署Pdf文档。我需要这些文档有时间戳并启用LTV(启用PAdES LTV)。 我遇到了一些关于撤销数据的问题。 我对这个领域有点陌生,所以请容忍我。 我按照DSS本身提供的说明和演示进行操作,但没有效果。 我已经成功地使用PAdES B和PAdES T签署了Pdf,所以我的TSA服务设置正确。 我遇到的问题是,每次我尝试使用LTV签署Pdf时,都会出现以下错误:“eu.europ

  • 我正在使用java,从服务器收到了一些json字符串。我收到了带有readUTF的json字符串,但是有一些数据丢失了。我没有收到每个json包的前两个字符。另一个问题是收到json字符串有延迟。例如,服务器发送了一个json字符串,客户端无法收到它,直到服务器和客户端发送的大约50个json字符串突然显示所有的json字符串。主要问题是什么? 因为服务器用UTF格式发送数据,所以我不能用Buff

  • fsharp 是一个开源的 F# 语言编译器。

  • 本文向大家介绍Django数据库连接丢失问题的解决方法,包括了Django数据库连接丢失问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 问题 在Django中使用mysql偶尔会出现数据库连接丢失的情况,错误通常有如下两种 OperationalError: (2006, 'MySQL server has gone away') OperationalError: (2013, 'Los