【问题标题】:Get Referenced Assemblies in F#在 F# 中获取引用的程序集
【发布时间】:2010-02-24 16:14:53
【问题描述】:

我正在尝试通过迭代加载引用的程序集。
我加载程序集,并通过 getRefs 获取引用的程序集。 getRefs没有任何输入参数所以应该是val getRefs: Assembly->AssemblyName[],但认为是unit->AssemblyName[], 有什么想法吗?


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 

【问题讨论】:

    标签: assembly f# lambda


    【解决方案1】:

    您必须通过在末尾添加 () 来执行 GetReferencedAssemblies 方法。如果不添加“()”,您只是返回对函数的引用,而不是返回函数的结果。此外,将 List.iter 更改为 Array.iter。 GetReferencedAssemblies 返回数组,而不是列表。

    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);;  
    

    【讨论】:

      【解决方案2】:

      如果函数没有输入,则其输入类型为“单元”。这类似于 C 中的 void,除了函数参数是显式的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多