我有一個.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