在创建新项目时,我使用 VS2012 提供的标准 F# Portable Library 选项创建了一个 F# 库。该库旨在供 C# 程序使用。
F# 库需要接受来自封装在 C# 对象中的 C# 应用程序的数据。我已将包含该对象的 C# dll 导入 F# 库,但出现以下 2 个错误:
无法解析主要引用“DataStructures”,因为它间接依赖于框架程序集“mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”,在当前目标框架中无法解析。“.NETPortable,版本=v4.0,配置文件=配置文件47”。要解决此问题,请删除引用“DataStructures”或将您的应用程序重新定位到包含“mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的框架版本。
和
无法解析主要引用“DataStructures”,因为它间接依赖于框架程序集“System,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”,在当前目标框架中无法解析。“.NETPortable,版本=v4.0,配置文件=配置文件47”。要解决此问题,请删除引用“DataStructures”或将您的应用程序重新定位到包含“System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的框架版本。
在查看消息时,很明显在 F# 和 C# dll之间存在版本不兼容问题,mscorlib
并在其中使用。System
所以我天真地将 F# 引用切换到 C# dll 使用的确切引用。这暂时解决了我的错误,但是一旦我构建它,f# 库的引用就会自动切换回它们以前的“可移植”版本mscorlib
和System
.
我可以通过强制 C# 应用程序在将其数据Tuple<'t>
发送到 f# dll 之前将其转换为来解决这个问题,从而摆脱该项目中的 C# dll 依赖项,但我希望避免这些转换。
这里有一篇文章
base CLI library 'mscorlib' is binary-incompatible with the referenced F# core library这表明pass explicit references to both on the command-line
.
有没有办法做到这一点是一个 F# 便携式库?还是有其他方法可以解决这些兼容性问题?
编辑:我还检查了:
- 两个 dll 都针对 .net 4.5
- 两个 dll 的构建选项都设置为标准的“任何 cpu”设置