【发布时间】:2010-10-01 18:09:24
【问题描述】:
我有一个 .Net 程序集,它导入一个链接到 v2.0 运行时的程序集。我遇到的问题是,当我尝试对我的程序集运行一些测试时,Fusion 会尝试加载错误版本的依赖程序集。
查看程序集清单后,我明白了原因:链接了错误版本的FSharp.Core。在我的构建文件中,我将FSharp.Core, Version=4.0.0.0 设为显式,但FSharpPowerPack 似乎链接到v2.0.0.0,并且有些方法似乎“赢得”了这场链接战。
这是清单:
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern System.Core
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern System
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern FSharp.PowerPack
{
.publickeytoken = (A1 90 89 B1 C7 4D 08 09 ) // .....M..
.ver 2:0:0:0
}
.assembly extern mscorlib as mscorlib_8
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly extern System.Core as System.Core_9
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 3:5:0:0
}
.assembly extern FSharp.Core
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 2:0:0:0
}
请注意,似乎通过包含 FSharpPowerPack,其他 .Net 程序集(mscorlib、System、System.Core)的 v2.0 和 v3.5 被包含并别名。为什么会这样?这是否与加载错误版本的FSharp.Core的问题有关?
编辑:澄清一下,我的程序集是由 C# v4.0 编译器生成的。
【问题讨论】:
-
这就像一个 F# 编译器错误。检查您是否可以使用引用这些程序集并创建一些对象的 C# 编译器来重现它。我对此表示怀疑。如果没有,则 ping connect.microsoft.com。
-
@Hans Passant - 这实际上是生成此清单的 C# 编译器。我刚刚链接到 F# 库...
标签: .net .net-2.0 .net-4.0 linker fusion