System.MissingMethodException: метод не найден: 'FSharp.Data.HttpResponse
Я написал AT для своего приложения на F#, используя Tickspec. я использую FSharp.Data.Http.Request
и я получаю следующую ошибку:
System.MissingMethodException : Method not found: 'FSharp.Data.HttpResponse
FSharp.Data.Http.Request(System.String,
Microsoft.FSharp.Core.FSharpOption`1<Microsoft.FSharp.Collections.FSharpList`1
<System.Tuple`2<System.String,System.String>>>,
Microsoft.FSharp.Core.FSharpOption`1<System.Collections.Generic.IEnumerable`1
<System.Tuple`2<System.String,System.String>>>,
Microsoft.FSharp.Core.FSharpOption`1<System.String>,
Microsoft.FSharp.Core.FSharpOption`1<FSharp.Data.HttpRequestBody>,
Microsoft.FSharp.Core.FSharpOption`1<System.Collections.Generic.IEnumerable`
1<System.Tuple`2<System.String,System.String>>>,
Microsoft.FSharp.Core.FSharpOption`1<System.Net.CookieContainer>,
Microsoft.FSharp.Core.FSharpOption`1<Boolean>,
Microsoft.FSharp.Core.FSharpOption`1<System.String>,
Microsoft.FSharp.Core.FSharpOption`1<Microsoft.FSharp.Core.FSharpFunc`2
<System.Net.HttpWebRequest,System.Net.HttpWebRequest>>)'.
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[]
arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,
Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at <StartupCode$TickSpec>.$TickSpec.createAction@212-1.Invoke()
FSharp.Data
версия 2.1.1.0.
В fsproj
:
ToolsVersion is 14.0
TargetFrameworkVersion is v4.6.1
F# is 4.0.
У меня есть другой набор AT для другого приложения, и я использую тот же FSharp.Data.dll
и то же самое Http.Request
метод, и они используют F# 4.0
и я не столкнулся с проблемами.
Я не думаю, что есть какая-либо проблема с DLL, так как я использовал ее в примере приложения, и я смог использовать этот метод Http.Request. Я создал новое решение, так как подумал, что, может быть, я использую старую версию FSharp.Core и ту же проблему с FSharp.Data.
Единственное решение, которое я нашел, было вернуться к F#3.0
для этого конкретного проекта. Я не хочу использовать F#3.0
хотя, как мы перешли к F#4.0
со всем другим приложением.
Есть идеи, как это решить?
2 ответа
Добавьте app.config или следующее к любому существующему. Если у вас есть несколько проектов. т.е. тест и приложение, вам нужно будет добавить его к обоим.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.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.0.0" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Похоже, вы как-то привязаны к F#3.x в FSI. Можете ли вы увидеть в своем скрипте (если вы выполняете это через скрипт), на какую версию FSharp.Core ссылаются?
Если я правильно помню, TickSpec скомпилирован с F3.x, так что это может быть проблема перенаправления привязки или подобное.