【问题标题】:Alea 3.0.3 C# sample program crashing with reference to F# System.TypeInitializationExceptionAlea 3.0.3 C# 示例程序崩溃参考 F# System.TypeInitializationException
【发布时间】:2017-09-05 04:12:31
【问题描述】:

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

发生System.TypeInitializationException H结果=0x80131534 Message='Alea.GlobalImplicitMemoryTracker' 的类型初始化程序引发了异常。 来源=Alea 堆栈跟踪: 在 Alea.GlobalImplicitMemoryTracker.GetInManagedFlag() 在 gptest.Program.DelegateWithClosureGpu() 在 c:\Users\myuser\documents\visual studio 2017\Projects\gptest\gptest\Program.cs:line 14 中的 gptest.Program.Main(String[] args)

内部异常 1: TypeInitializationException:“A.cf5aded17df9f7cc4c132234dda010fa7”的类型初始化程序引发了异常。

内部异常 2: FileNotFoundException:无法加载文件或程序集 'FSharp.Core,Version=4.4.0.0,Culture=neutral,PublicKeyToken=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));
    }
}
}

【问题讨论】:

    标签: aleagpu


    【解决方案1】:

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

    【讨论】:

    • “在 C# 中使用 Alea 需要 F# 支持并不直观”同意,这完全是愚蠢的!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-12-23
        • 2011-03-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多