FSharp.Compiler.CodeDom for VS2008和VS2010并排

时间:2010-05-27 21:28:06

标签: f# compilation compatibility codedom side-by-side

我正在使用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会抱怨二进制不兼容

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

由于

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

鉴于您刚才问过这个问题,我想知道您是否拥有最新的PowerPack?值得注意的是,你在5月27日问了这个问题,但我在下载页面上看到它最后一次更新是在5月30日。我不知道如果这会影响到任何东西,只需指出它。

我还稍微编了一下这个问题,如果这会将问题移到顶部并导致Tomas看到它并回复:)

答案 2 :(得分:1)

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

[ - HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\ FSharp \ 2.0 \运行时]

我认为找到文件/编译器的解析路径意味着这个hack会导致两者并行工作,但只测试了2.0的情况。 与任何reg hack一样,你应该首先备份那个reg键。