2016-09-09 11 views
4

Я написал ATs для своего приложения в F #, используя Tickspec. Я использую FSharp.Data.Http.Request и я получаю следующее сообщение об ошибке:System.MissingMethodException: Метод не найден: 'FSharp.Data.HttpResponse

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>[email protected]() 

FSharp.Data версия 2.1.1.0.

В fsproj:

ToolsVersion is 14.0 

TargetFrameworkVersion is v4.6.1 

F# is 4.0. 

У меня есть еще один набор ATs для другого приложения, и я использую тот же 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> 
1

Похоже, вы как-то привязаны к F # 3.x в FSI. Вы можете видеть в своем скрипте (если вы выполняете это через скрипт), к какой версии FSharp.Core ссылаются?

Если я правильно помню, TickSpec скомпилирован против F3.x, так что это может быть проблема переадресации связывания или подобное.

+0

Не было ссылки на 'FSharp.Core'. Я добавил его, и «MissingMethodException» исчез. Версия 'FSharp.Core'' '4.3.0.0' - это правильно для' F # 4.0'? В соответствии с этим: https://fsharp.github.io/2015/04/18/fsharp-core-notes.html#do-not-bundle-fsharp-core-with-a-library Я должен ссылаться на 'FSharp .Core 4.4.0.1' для 'F # 4.0', хотя когда я это делаю, появляется' MethodMissingException' ... – Marta

+1

Когда вы добавляете ссылку, добавляете ли вы переадресацию привязки в свой файл конфигурации? –

+0

Нет, я не ... – Marta