【问题标题】:Force FSI, the .NET 4 version, to load assamblies that are compiled for .NET 2.0强制 FSI(.NET 4 版本)加载为 .NET 2.0 编译的程序集
【发布时间】:2011-08-09 16:13:20
【问题描述】:

我主要使用 fsi、F# 交互式使用 .NET 4.0,但我有几个我需要访问的 dll 仅为 .NET 2.0 版本的框架编译(我检查了他们引用的清单mscorlib 版本 2)。

当我尝试使用这些类型时,我遇到了类型加载异常。我假设这是因为在进行动态类型加载等时某些 .NET 2.0/.NET 4.0 不兼容。确切的错误消息是:

System.TypeLoadException: Could not load type 'IMyInterface' from assembly 'MyDll, Version=2.3.17.15, Culture=neutral, PublicKeyToken=null'.

我尝试使用的类型是接口,我不知道这是否重要。使用已编译的等效代码可以正常工作。

这是由于 .NET 2.0/.NET 4.0 不兼容造成的假设是否正确?如果是这样,有什么办法可以解决它?

【问题讨论】:

  • 接口的任何成员是否使用在不同的外部程序集中定义的类型?
  • 可能是因为 .Net 4.0 和 2.0 使用不同的 IL 代码。

标签: .net f# f#-interactive .net-internals


【解决方案1】:

您面临的问题是 .NET 4.0 mscorlib n 程序集与 .NET 2.0 FW 程序集之间的版本控制。由于整个 .NET 4.0 的版本不同,我认为您不能在其中使用 .NET 2.0。要进行测试,您可以拥有两个具有不同版本的类库(对它们签名!),然后尝试加载它们,由于它们的依赖关系,它根本无法工作。

您可能应该再次获得使用 .NET 4.0 构建的 .NET 2.0 FW 程序集,可以使用“4.0”之类的程序集后缀

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多