我在F#项目中定义了一个.NET类:
for x1 in range(a**l):
for x2 in range(a**l):
for x3 in range(a**l):
output[x1,x2,x3] = HeavyComputationThatIsThreadSafe1(x1,x2,x3)
当我尝试从C#单元测试项目和ASP.NET应用程序运行它时,我得到了这个:
找不到方法: ' Microsoft.FSharp.Control.FSharpAsync`1
此类还有另外一种使用
的方法type public StockAnalyzer() =
member public this.GetStockClose ticker =
try
let stockInfo = YahooContext.Load("http://ichart.finance.yahoo.com/table.csv?s=" + ticker)
let mostRecent = stockInfo.Rows |> Seq.head
(float)mostRecent.``Adj Close``
with
| :? System.Net.WebException -> -1.0
是否导致interop在异步上失败?即使我甚至没有调用那种方法?
答案 0 :(得分:1)
为了扩展Fyodor Soikin在评论中所说的内容,这通常是由于单元测试项目与您尝试测试的任何内容之间的FSharp.Core版本不匹配而导致的。
您可以创建绑定重定向,将引用重定向到不同版本的FSharp.Core。您可以通过在项目中创建App.config
文件来执行此操作,它应如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<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.3.0.0" newVersion="4.3.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
请参阅:https://fsharp.github.io/2015/04/18/fsharp-core-notes.html#use-binding-redirects-for-applications
该页面显然对FSharp.Core上可能需要的其他信息也很有用。
P.S。请注意版本号。实际上,您可能需要重定向到FSharp.Core版本4.4.0.0(F#4.0)