2

我正在使用 FSharp.Compiler.CodeDom (来自PowerPack)来动态创建 F# 类。问题是,我的计算机上同时有 VS2008 和 VS2010(它们工作正常),并且在此配置中使用 F# 充其量是错误的:

  • 如果我不安装 InstallFSharp.msi,那么在 VS2008 下,构建的类会抱怨找不到 FSharp.Core(即使它们被引用)
  • 如果我安装 InstallFSharp.msi,那么在 VS2008 下,构建的类将使用为 VS2010 构建的 F#,并且会抛出二进制不兼容异常,因为它将加载 .net4 变体:

    FSC:错误 FS0219:引用的或默认的基本 CLI 库“mscorlib”与引用的 F# 核心库“C:\Program Files (x86)\Microsoft F#\v4.0\FSharp.Core.dll”二进制不兼容。考虑重新编译库或显式引用与您正在使用的 CLI 版本匹配的库版本。

  • 如果我将在之前位置找到的F#替换为单独安装的dll-s,那么VS2010当然会抱怨二进制不兼容

我是否忽略了某些东西,或者他们不会简单地为这样的共享环境工作?当我部署应用程序时,这可能意味着真正的问题。

谢谢

4

3 回答 3

2

我自己也有类似的问题 - 我们的源代码树的主干设置为使用 VS 2008 构建,而我们最新的分支升级到 VS 2010。至少可以说,F# 的情况令人厌烦。

我们找到的答案是使用 --noframework 编译器标志。使用该选项集,您可以(必须)指定要使用的 mscorlib.dll 和 System.dll,因此可以针对任何受支持的 .NET 框架进行构建。

于 2010-10-06T20:07:49.693 回答
1

鉴于您前一段时间最初提出了这个问题,我想知道您是否拥有最新的 PowerPack?值得注意的是,您在 5 月 27 日提出了这个问题,但我在下载页面上看到它最后一次更新是在 5 月 30 日。我不知道这是否会影响任何事情,只是指出来。

我还稍微编辑了问题,以防将问题移到顶部并导致 Tomas 看到它并回复:)

于 2010-10-11T11:46:20.790 回答
1

我修复了一个可能与 reghack (Windows 7) 相同或不同的问题:Windows 注册表编辑器版本 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\FSharp\2.0\Runtime]

我相信找到文件/编译器的解析路径意味着这个 hack 将导致两者并行工作,但只测试了 2.0 案例。与任何 reg hack 一样,您应该首先备份该 reg 密钥。

于 2012-02-08T12:33:44.203 回答