我试图将FSharp PowerPack用于ArgParser库,但是在我的机器上遇到了一些严重的问题,在这些问题上,它似乎从GAC加载了错误的FSharp.Core.dll版本,从而导致了ArgParser的加载失败。理想情况下,我会解决这个问题(因为它可以在我同事的计算机上工作),但是我尝试过从系统中卸载和重新安装FSharp二进制文件的各种组合,但都没有效果。
由于我不太喜欢这样的事实,我不能只是删除已知的正确的DLL在可执行目录中,因为GAC,如果有任何方式只是禁用搜索在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。这种事不会发生在我同事的机器上。
发布于 2011-03-10 17:13:04
预构建的PowerPack二进制文件是针对CLR v2编译的,它们还引用了FSharp.Core v2。这可能就是造成这个问题的原因。我真的不明白为什么.NET 4版本的PowerPack不作为下载(或在NuGet!)但你可以围绕这两种方式:
您可以设置一个assembly binding redirect,但我不知道这是否适用于fsi.exe。
或者可以将源代码下载到F# PowerPack并编译自己的.NET 4版本。这很容易。
发布于 2011-03-10 16:38:31
GAC总是获胜--这是一个安全特性。如果您有不同版本的FSharp.Core,为什么不把它也放到GAC中,或者在app.config中使用重定向绑定来强制加载更新的版本,或者根据新版本重新构建应用程序(可能不可能)?
-Oisin
发布于 2011-03-10 17:53:05
我刚刚查看了一个.net 4.0项目,其中我正在使用ArgParser,我引用的是FSharp.Core和FSharp.Powerpack,以及在app.config中我有重定向设置:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>hth
https://stackoverflow.com/questions/5262714
复制相似问题