我有一个.Net程序集,它导入与v2.0运行时链接的程序集。我遇到的问题是,当我尝试在我的程序集上运行一些测试时,Fusion会尝试加载相关程序集的错误版本。从.Net v4.0程序集链接到.Net v2.0程序集似乎也链接(和别名)mscorlib v2.0。为什么?
查看程序集清单后,我可以看到为什么:连接了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.Core程序)的v2.0和v3.5版本都包含和别名。为什么会发生?这与加载FSharp.Core
的错误版本的问题有关吗?
编辑:为了澄清,我的程序集正在由C#v4.0编译器生成。
这个呱呱叫就像一个F#编译器的bug。检查是否可以用C#编译器重新引用这些程序集并创建一些对象。我对此表示怀疑。如果没有,则ping通connect.microsoft.com。 – 2010-10-01 18:55:19
@Hans Passant - 这实际上是生成此清单的C#编译器。我只是链接到F#库... – codekaizen 2010-10-01 19:01:10