J'ai un assemblage .Net qui importe un ensemble lié avec le moteur d'exécution v2.0. Le problème que j'ai est que quand j'essaye d'exécuter quelques tests sur mon assembly, Fusion essaye de charger la mauvaise version d'un assembly dépendant. Après avoir regardé le manifeste d'assemblage, je peux voir pourquoi: la mauvaise version de FSharp.Core
est liée. Dans mon fichier de construction, je fais FSharp.Core, Version=4.0.0.0
explicite, mais FSharpPowerPack
semble lier à la version 2.0.0.0, et certains semblent gagner cette bataille de liaison.Liens vers un ensemble de v2.0 .Net d'un ensemble de v4.0 .Net semble également un lien (et alias) v2.0 mscorlib. Pourquoi?
est ici manifeste:
// 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
}
Notez qu'il semble que, en incluant FSharpPowerPack
la v2.0 et v3.5 d'autres ensembles .Net (mscorlib, système, System.Core) sont inclus et aliasé. Pourquoi cela arrive-t-il? Est-ce lié au problème de chargement de la mauvaise version de FSharp.Core
?
Modifier: Pour clarifier, mon assembly est généré par le compilateur C# v4.0.
Ce charlatan ressemble à un bug du compilateur F #. Vérifiez si vous pouvez le reprocher avec le compilateur C# référençant ces assemblages et créant des objets. J'en doute. Si ce n'est pas le cas, envoyez un ping à connect.microsoft.com. –
@Hans Passant - c'est en fait le compilateur C# produisant ce manifeste. Je viens de me lier aux librairies F # ... – codekaizen