Alea GPU教程在使用FSharp.Core 4.4.0.0和VS 2015 Update 2编译时出现错误。

8
我在使用Visual Studio 2015 Community Update 2和FSharp.Core版本为4.4.0.0的.NET 4.5运行时编译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,也无法编译它。错误是相同的。
您有任何关于如何解决此问题的想法吗?

https://fsharp.github.io/2015/04/18/fsharp-core-notes.html - FoggyFinder
所有推荐的设置似乎都已经就位,除了一个: _不要将FSharp.Core与库捆绑在一起请勿将FSharp.Core的副本与您的库或包一起提供。如果这样做,将会给使用您的库的用户带来麻烦。关于库绑定到哪个FSharp.Core的决定取决于库的应用程序托管。库和/或库包可以对此进行约束,但它并不决定它。不幸的是,Alea.* NuGet包确实捆绑了FSharp.Core 4.3.1.0,但在构建过程中却没有被识别出来。 - TermoTux
我可以看到 App.config 的屏幕截图吗? - FoggyFinder
这是两个应用程序配置文件 - 解决方案级别和 F# 项目级别:https://gist.github.com/n074v41l4bl34u/c3f722701165c5c16226f6e97278b2e9 - TermoTux
我遇到了类似的问题。这方面有什么新消息吗?谢谢。 - p8me
显示剩余5条评论
5个回答

10

我已经成功构建过几次,但它们是完全随机的,我无法找出导致错误消失的原因。

也许是多次以管理员身份重启Visual Studio的某种组合。

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

官方指南

AleaGPUTutorial 中写道:

在Visual Studio中构建之前,建议您在打开解决方案之前恢复包。这是由于使用Fody与F#项目存在已知问题。您可以在安装手册(特别是备注部分)中找到有关此问题的更多详细信息。

从手册中可以看到:

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

我完全按照手册上的步骤操作,但仍然只得到随机构建成功的结果。

最后的希望

如何在只有FSharp.Core 4.3.1时使用FSharp.Core 4.3.0

我曾天真地以为安装了F# 3.1后会自动添加从FSharp.Core 4.3.0.0到4.3.1.0的重定向,或者确保FSharp.Core 4.3.0.0也可用。显然,我已经太习惯语义化版本号了,这绝对不是F#所使用的版本号方案,因为F#采用的版本号方案并不是语义化版本号


@ginkner 所有这些都提供随机结果,除了《最后的希望》我无法尝试。 - Brains
1
以上答案解决了我在C#程序中遇到的System.TypeInitializationException问题:https://dev59.com/TZzha4cB1Zd3GeqPDlcl。 - Anders Finn Jørgensen

0

0
在您的项目文件中:"项目名称\packages\Alea.版本号\tools",有一堆.dll文件,其中包括FSharp.Core,由于某些原因,Visual Studio没有复制它。将该.dll文件复制到包含项目构建的bin\Debug目录中,应该就可以正常工作了。

0

当我第一次尝试加载 Alea 3.0.3 的样例文件时,我也遇到了类似的问题。花了我几分钟时间才找到解决方法,而且运行样例文件非常简单。

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

之后,该项目就可以无问题地运行了。

我不需要将任何东西安装到 GAC 中。


0
为了解决这个问题,从Nuget控制台进行操作:
Install-Package FSharp.Core -Version X

其中X是您需要的版本。您可以在此处检查版本:FSharp.Core

确保您的项目设置为x64:

enter image description here

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接