Alea 3.0.3 C# 示例程序崩溃,参考 F# System.TypeInitializationExceptio



我启动了一个新的VS2017 c#控制台应用程序项目,并从包管理器安装了Alea和Alea.Fody。从网站运行一段示例代码给了我以下异常。

系统类型初始化发生异常 HResult=0x80131534 Message='Alea.GlobalImplicitMemoryTracker'的类型初始值设定项抛出异常。 来源=阿丽亚 堆栈跟踪: at Alea.GlobalImplicitMemoryTracker.GetInManagedFlag(( 在 GPU 测试中。Program.DelegateWithClosureGpu(( 在 GPU 测试中。Program.Main(String[] args( in c:\Users\myuser\documents\visual studio 2017\Projects\gputest\gputest\Program.cs:line 14

内部异常 1: TypeInitializationException:'A.cf5aded17df9f7cc4c132234dda010fa7' 的类型初始值设定项引发异常。

内部异常 2: FileNotFoundException:无法加载文件或程序集"FSharp.Core,版本=4.4.0.0,区域性=中性,公钥令牌=b03f5f7f11d50a3a"或其依赖项之一。系统找不到指定的文件。

这是整个程序。

using Alea;
using Alea.Parallel;
using System.Linq;
namespace gputest
{
class Program
{
private const int Length = 1000000;
static void Main(string[] args)
{
DelegateWithClosureGpu();     
}
[GpuManaged]
public static void DelegateWithClosureGpu()
{
var arg1 = Enumerable.Range(0, Length).ToArray();
var arg2 = Enumerable.Range(0, Length).ToArray();
var result = new int[Length];
Gpu.Default.For(0, result.Length, i => result[i] = arg1[i] + arg2[i]);
var expected = arg1.Zip(arg2, (x, y) => x + y);
//Assert.That(result, Is.EqualTo(expected));
}
}
}

> 我不得不通过修改 .NET 桌面开发选项来安装 F# 语言支持,为 VS2017 安装 F#,但之后它确实有效。将 Alea 用于 C# 需要 F# 支持并不直观。这应该列在安装指南中。

需要安装 F# 运行时。在VS2015中,选择你的vs安装,然后选择修改,添加F#功能。

我在VS2017.3中遇到了类似的错误,已经安装了F#,从一个干净的项目开始,使用NuGet的Alea GPU 3.0.3。事实证明,该包包含引用的所有 DLL,包括 FSharp.Core.dll(检查 C# 项目的 .../packages/子目录(。我将所有 DLL 复制到包含可执行文件的目录中(例如,.../bin/Debug(,取消选中 C# 程序"首选 32 位"的属性,然后重建。然后我的程序运行良好。请注意,我认为可能需要更正 Alea GPU .targets 文件才能将所需文件复制到适当的目录。

最新更新