2010-02-24 5 views
1

J'essaie de charger les assemblages référencés par le biais d'une itération.
Je charge l'assembly et récupère les assemblys référencés par getRefs. getRefs n'a aucun paramètre d'entrée, donc il devrait être val getRefs: Assembly-> AssemblyName [], mais pense que c'est unit-> AssemblyName [], des idées?Obtenir des assemblages référencés en F #


let getreffiles (name:string) = 
    let loadAssembly (name:string)= 
     Assembly.Load(name) 
    let getRefs (assembly:Assembly)= 
     assembly.GetReferencedAssemblies 
    //Get the referenced assembly list and print the full name to console 
    name 
    |>loadAssembly 
    |>getRefs 
    |>List.iter (fun s -> 
      printfn "Referenced Assembly name %s types" s.FullName);; 

Type mismatch. Expecting a (unit -> AssemblyName []) -> 'a but given a 'b list -> unit  
The type 'unit -> AssemblyName []' does not match the type ''a list'  
C:\Users\Ebru\Documents\Visual Studio 2010\Projects\Find\GetAssembly.fs 

Répondre

7

Vous devez exécuter la méthode GetReferencedAssemblies, en ajoutant un() à la fin. Sans ajouter "()", vous renvoyez simplement une référence à la fonction au lieu de renvoyer les résultats de la fonction. En outre, modifiez List.iter en Array.iter. GetReferencedAssemblies renvoie et array, pas une liste.

let getreffiles (name:string) = 
    let loadAssembly (name:string)= 
     Assembly.Load(name) 
    let getRefs (assembly:Assembly)= 
     assembly.GetReferencedAssemblies() 
    //Get the referenced assembly list and print the full name to console 
    name 
    |>loadAssembly 
    |>getRefs 
    |> Array.iter (fun s -> 
      printfn "Referenced Assembly name %s types" s.FullName);; 
0

Si une fonction n'a pas d'entrée, son entrée est de type 'unité'. Ceci est similaire à void en C, sauf que le paramètre de la fonction est explicite.

Questions connexes