在下面的F#代码中,我有一个定义了两个值的模块:int list
和(int list) list
。
在下面的C#代码中,我有单元测试尝试迭代F#中定义的列表值。
当我运行单元测试时,我得到以下输出。
[1; 2; 3] 3 1 2 3
[[1; 2; 3]; [2; 3; 4]] Test
'MasterMind.Test.ConsistentCodeTests.CanIIterateListsOfLists'
失败:
System.EntryPointNotFoundException
:找不到入口点。
在System.Collections.Generic.IEnumerable'1.GetEnumerator()
在System.Linq.Enumerable.Count[TSource](IEnumerable'1 source)
ConsistentCodeTests.cs(49,0)
:
在MasterMind.Test.ConsistentCodeTests.CanIIterateListsOfLists()
1次通过,1次失败,0次跳过,耗时3.11秒(NUnit 2.6.4)。
访问int list
可以正常工作。 C#代码可以成功打印,计算并迭代它。
尝试获取(int list) list
值的计数或迭代值会引发EntryPointNotFoundException
。我不知道如何解决这个错误。
module Game.Engine
let aList = [1;2;3]
let listOfLists = [[1;2;3];[2;3;4]]
[Test] public void CanIIterateAList()
{
Console.WriteLine(Game.Engine.aList);
Console.WriteLine(Game.Engine.aList.Count());
foreach (int i in Game.Engine.aList) Console.WriteLine(i);
}
[Test] public void CanIIterateListsOfLists()
{
Console.WriteLine(Game.Engine.listOfLists);
Console.WriteLine(Game.Engine.listOfLists.Count());
}
答案 0 :(得分:2)
这听起来像FSharp.Core
版本不匹配。检查您的某个软件包是否未安装FSharp.Core
v3.something - 如果有,请更新到最新的稳定软件包。
如果这还不够,请在测试项目的app.config中(假设您的测试运行器会注意它)检查是否存在绑定重定向到正确的v4程序集。
<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.4.0.0" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
如果仍然无效,请删除测试项目下的obj
文件夹并重建。