J'ai créé un fournisseur de type générateur simple qui prend le chemin d'un assemblage pour réorganiser les types, pour les placer sous l'espace de noms des fournisseurs de type (sorte d'internalisation si vous le souhaitez).Emission de types générés dans les fournisseurs de type F #
Le lien vers le code en question est ici https://github.com/colinbull/Playground
Maintenant, les types semblent être fournis correctement,
let[<Literal>]assemblyPath = @"D:\Appdev\Playground\SimpleLib\bin\Debug\SimpleLib.dll"
type T = Inno.InternalisingProvider<assemblyPath>
type C = T.Class1
[<EntryPoint>]
let main argv =
let c = new C()
printfn "Result: %A" c.X
System.Console.ReadLine() |> ignore
0
depuis les écrans dans VS sans erreurs signalées. Cependant, lorsque je compile cet assembly, IL semble être émis incorrectement avec l'erreur suivante.
Error 1: A problem occurred writing the binary 'obj\Debug\TypeProviders.Tests.exe': Error in pass3 for type Program, error: Error in GetMethodRefAsMethodDefIdx for mref = ".ctor", error: Exception of type 'Microsoft.FSharp.Compiler.AbstractIL.ILBinaryWriter+MethodDefNotFound' was thrown. FSC 1 1 TypeProviders.Tests
Les exemples donnés pour les types générés donnés dans samples pack ne semble pas avoir de StaticParameters
défini qui nécessite un type avec le nom du type prévu à renvoyer. Dans ce cas, comment puis-je émettre les types dans l'assemblage fourni? Actuellement, je fais ce qui suit
let provideAssembly (reqType:ProvidedTypeDefinition) assemblyPath =
let name = Path.GetFileName(assemblyPath)
let providedAssembly = ProvidedAssembly.RegisterGenerated(assemblyPath)
for t in providedAssembly.GetExportedTypes() do
let ty = createGeneratedType t
ty.SetAssembly(providedAssembly)
reqType.AddMember(ty)
reqType
Merci à l'avance
Dieu, je suis tellement stupide, je l'avais essayé, mais d'abord mettre une référence directe au type généré dans mon code, donc je recevais alors des erreurs de compilation. Lesson learn't -> lire correctement les messages d'erreur. Merci encore –