【问题标题】:F# PowerPack Target RuntimeF# PowerPack 目标运行时
【发布时间】:2010-12-30 22:45:32
【问题描述】:

F# PowerPack 的预构建二进制文件是针对 .NET 2.0 运行时编译的。如果我有一个 .NET 4.0 项目,为 .NET 4 运行时编译 PowerPack 源代码有什么好处吗?

【问题讨论】:

  • 如果有人想要使用 F# v2 SP1 编译器针对 .NET 4.0 构建的 F# PowerPack 二进制文件,我已将它们托管在 here
  • 真正好的官方 NuGet 包包含 .NET 2 和 .NET 4 二进制文件。

标签: f# assembly-binding-redirect


【解决方案1】:

我在F# snippets web site 中使用了.NET 2.0 版本的F# PowerPack,这是一个.NET 4.0 ASP.NET 项目。不使用 4.0 版本的唯一缺点是我在寻找 2.0 版本(被 2.0 版本的 PowerPack 引用)时必须添加配置以加载 4.0 版本的FSharp.Core.dll

我必须添加如下内容,然后它就可以正常工作了:

<configuration>
  <!-- ... -->
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" />
      <bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
  </runtime>
</configuration>

【讨论】:

  • 所以有一些好处,但不是很大。尽管如此,由于 F# 是作为 VS 2010 的一部分发布的,PowerPack 的默认二进制下载需要这样的解决方法似乎很奇怪。
  • 我刚刚遇到了一个使用 fsharp 和 fsharp powerpack 的 asp.net mvc 3 站点的问题。它因异常消息而失败:无法加载文件或程序集“FSharp.Core,版本=2.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)。如上所述,我添加了一个dependantAssembly 元素并对其进行了排序。
  • @Kit 这是很久以前的事了,所以我不再知道细节了:-)。我想为 .NET 4.0 重新编译 F# PowerPack 可能更容易(使用源代码)。
  • 是的,试过了——同样的问题。我可能犯了一个错误,因为那时我很着急。我现在可能会坚持使用重定向。 :-)
  • @Kit。我得到了确切的消息(即“无法加载文件或程序集 'FSharp.Core, Version=2.0.0.0,”)从 Visual Studio 2010 将 F# ASP.NET MVC 应用程序发布到 Azure。我经历了很多Azure 相关修复,有一些困难,但没有成功。 Tomas 在 web.config 中的修复第一次奏效!
【解决方案2】:

我的旧 .NET app.config 是

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

但电源组在 VS2010 和 .NET4 fsproj 上安装并运行良好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2011-07-02
    • 2011-10-09
    • 2011-09-02
    • 2015-11-30
    • 1970-01-01
    • 2011-02-24
    • 2011-08-28
    相关资源
    最近更新 更多