【问题标题】:Alea GPU Tutorial not compiling on VS 2015 Update 2 with FSharp.Core 4.4.0.0Alea GPU 教程未在带有 FSharp.Core 4.4.0.0 的 VS 2015 Update 2 上编译
【发布时间】:2016-07-22 05:11:25
【问题描述】:

在 .Net 4.5 运行时使用 FSharp.Core 版本 4.4.0.0 在 Visual Studio 2015 Community Update 2 中编译 Alea GPU 教程:https://github.com/quantalea/AleaGPUTutorial 时出现错误。

Fody:发生未处理的异常: 例外: 无法加载文件或程序集“FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件。

堆栈跟踪:

at Alea.CUDA.AOTCompileLogger..ctor(List`1 logs, Int32 warningCount, Int32 errorCount)
at Alea.CUDA.AOTCompileLogger..ctor()
at Alea.CUDA.AOTCompiler..ctor()
at Alea.CUDA.Fody.ModuleWeaver.Execute()
at lambda_method(Closure , Object )
at InnerWeaver.ExecuteWeavers() in c:\Code\Fody\FodyIsolated\InnerWeaver.cs:line 164
at InnerWeaver.Execute() in c:\Code\Fody\FodyIsolated\InnerWeaver.cs:line 82
Source:
Alea.CUDA
TargetSite:
Void .ctor(System.Collections.Generic.List`1[Alea.CUDA.AOTCompileLogEntry], Int32, Int32)   

无论我如何在所有可能的 .config 文件中设置bindingRedirect 选项,Tutorial.Cs 和 Tutorial.Fs 项目都会发生这种情况。 Fody 引用加载机制似乎忽略了这些重定向。

但是,即使将教程解决方案设置为 FSharp.Core 4.3.1.0 也不允许我编译它。错误是一样的。

您对如何解决它有任何想法吗?

【问题讨论】:

  • 所有推荐设置似乎都已到位,除了:不要将 FSharp.Core 与库捆绑 不要在库中包含 FSharp.Core 的副本或包裹。如果这样做,您将为图书馆的用户造成严重破坏。关于库绑定到哪个 FSharp.Core 的决定取决于库的应用程序托管。库和/或库包可以对此施加限制,但它没有决定。 不幸的是,Alea.* NuGet 包确实捆绑了 FSharp.Core 4.3.1.0,但它没有被使用在构建期间。
  • 我可以看到 App.config 的截图?
  • 不幸的是,我只有 VS2012 - 所以我无法复制您的错误。
  • 有空的时候联系我

标签: c# f# aleagpu


【解决方案1】:

在您的项目文件中:“project name\packages\Alea.version\tools”有一堆 .dll 文件,包括 FSharp.Core 不是由于某种原因被视觉工作室复制。将该 .dll 复制到包含项目构建的 bin\Debug 目录,它应该可以正常工作。

【讨论】:

    【解决方案2】:

    要解决此问题,请从 Nuget 控制台:

    Install-Package FSharp.Core -Version X
    

    X 是您需要的版本。你可以在这里查看版本:FSharp.Core

    确保您的项目设置为 x64:

    【讨论】:

      【解决方案3】:

      当我第一次尝试加载一个 Alea 3.0.3 示例时,我也遇到了类似的问题。我花了几分钟才弄清楚,但这对我有用,并且运行示例文件非常简单。

      1) 使用 Visual Studio 包管理器控制台运行随 sample.zip 文件提供的 ./paket_setup.bat 2) 从示例项目解决方案文件夹 ./packages/FSharp.Core/lib/net40/FSharp.Core.dll 下添加 FSharp.Core.dll

      在此之后项目运行没有问题。

      我不需要在 GAC 中安装任何东西

      【讨论】:

        【解决方案4】:

        好的,这对我有用。您所要做的就是将 Fsharp.core 4.3.1.0 添加到 gac。

        可以在此处找到有关如何执行此操作的说明:

        http://forum.codio.com/t/solved-could-not-load-file-or-assembly-fsharp-core-version-4-3-0-0-error/1774

        【讨论】:

          【解决方案5】:

          我已经成功构建了几次,但它们完全是随机的,我无法弄清楚是什么导致错误消失。

          可能是多次以管理员身份重新启动 Visual Studio 的某种组合。

          我也尝试过来自不同来源的FSharp.Core.dll,结果随机:

          官方

          AleaGPUTutorial 写着:

          在 Visual Studio 中构建之前,建议您在打开解决方案之前还原包。这是由于在 F# 项目中使用 Fody 的一个已知问题。您可以在installation manual (especially the Remarks section) 中找到有关此问题的更多详细信息。

          来自手册:

          Alea GPU 是用 F# 实现的,因此它使用 F# 运行时。如果您使用 C# 或 VB 的 Alea GPU,您还需要 3.1 或更高版本的 FSharp.Core.dll 程序集。如果您使用 Visual Studio,则可以通过导航到 Add Reference -> Assemblies -> Extensions -> FSharp.Core 4.3.1.0. 来定位该程序集。或者,您可以将 FSharp.Core NuGet 包添加到您的项目中。

          我完全按照所写的做了,但只是再次随机构建成功。

          最后的希望

          How to use FSharp.Core 4.3.0 when all you have is 4.3.1

          我曾经有一个天真的假设,即当您安装 F# 3.1 时,它会自动添加从 FSharp.Core 4.3.0.0 到 4.3.1.0 的重定向,或者可能确保 FSharp.Core 4.3.0.0 也可用。显然,我已经习惯了语义版本控制,which is definitely not the versioning scheme used for F#

          【讨论】:

          • @ginkner 所有这些都提供随机结果,除了我无法尝试的 Last Hope
          • 以上答案解决了我在 C# 程序中出现 System.TypeInitializationException 的问题:stackoverflow.com/questions/40503817/…
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-09
          • 2016-10-16
          • 1970-01-01
          • 2018-10-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多