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, так что это может быть проблема перенаправления привязки или подобное.

Другие вопросы по тегам