我正在尝试将FSharp PowerPack用于ArgParser库,但在我的机器上遇到一些严重问题,它似乎从GAC加载错误版本的FSharp.Core.dll然后导致负载ArgParser失败了。理想情况下,我会得到修复的问题(因为它适用于我的同事的计算机),但我尝试了从系统卸载和重新安装FSharp二进制文件的各种组合,但无济于事。
因为我不喜欢这样的事实,即我不能因为GAC而将已知的的DLL放在可执行目录中是正确的,如果有任何方法可以禁用在GAC中搜索我很乐意这样做。
我知道这个解决方案会有点破解,但是现在我只需要将其加载并运行,我会尝试任何事情。
修改
更多信息。这是项目的负载输出。
'PowerPackTest.exe' (Managed (v4.0.30319)): Loaded 'C:\WINNT\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'PowerPackTest.exe' (Managed (v4.0.30319)): Loaded 'C:\Projects\PowerPackTest\PowerPackTest\bin\Debug\PowerPackTest.exe', Symbols loaded.
'PowerPackTest.exe' (Managed (v4.0.30319)): Loaded 'C:\WINNT\Microsoft.Net\assembly\GAC_MSIL\FSharp.Core\v4.0_4.0.0.0__b03f5f7f11d50a3a\FSharp.Core.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'PowerPackTest.exe' (Managed (v4.0.30319)): Loaded 'C:\WINNT\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'PowerPackTest.exe' (Managed (v4.0.30319)): Loaded 'C:\WINNT\assembly\GAC_MSIL\FSharp.PowerPack\2.0.0.0__a19089b1c74d0809\FSharp.PowerPack.dll'
'PowerPackTest.exe' (Managed (v4.0.30319)): Loaded 'C:\WINNT\assembly\GAC_MSIL\FSharp.Core\2.0.0.0__b03f5f7f11d50a3a\FSharp.Core.dll'
如您所见,它首先加载FSharp.Core v4,但在最后一秒加载v2。这不会发生在我的同事的机器上。
答案 0 :(得分:4)
预构建的PowerPack二进制文件是针对CLR v2编译的,它们也引用了FSharp.Core v2。这可能是造成这个问题的原因。我真的不明白为什么不提供PowerPack的.NET 4版本作为下载(或在NuGet!中),但你可以解决这两种方式:
您可以设置assembly binding redirect,但我不知道这是否适用于fsi.exe
。
或者您可以将源代码下载到F#PowerPack并编译自己的.NET 4版本。这很容易。
答案 1 :(得分:0)
GAC总是获胜 - 这是一项安全功能。如果您有不同版本的FSharp.Core,为什么不将它放在GAC中,并在app.config中使用重定向绑定来强制加载较新版本,或重建您的应用程序(可能无法实现) )对新版本?
-Oisin
答案 2 :(得分:0)
我刚看了一个.net 4.0项目,我正在使用ArgParser,我正在引用FSharp.Core和FSharp.Powerpack,以及在app.config中我有重定向设置:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
HTH