Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在F#类型提供程序中发出生成的类型_F#_Type Providers_F# 3.0 - Fatal编程技术网

在F#类型提供程序中发出生成的类型

在F#类型提供程序中发出生成的类型,f#,type-providers,f#-3.0,F#,Type Providers,F# 3.0,我已经创建了一个简单的生成类型提供程序,该提供程序在重新组织类型时获取程序集的路径,以将它们置于类型提供程序命名空间下(如果愿意,可以进行某种内部化) 相关代码的链接在这里 现在这些类型似乎提供得很正确 let[<Literal>]assemblyPath = @"D:\Appdev\Playground\SimpleLib\bin\Debug\SimpleLib.dll" type T = Inno.InternalisingProvider<assemblyPath>

我已经创建了一个简单的生成类型提供程序,该提供程序在重新组织类型时获取程序集的路径,以将它们置于类型提供程序命名空间下(如果愿意,可以进行某种内部化)

相关代码的链接在这里

现在这些类型似乎提供得很正确

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

提前感谢

免责声明:浏览器编译的解决方案

我相信在这里,您不需要创建将包装现有类型的生成类型=>这应该是可行的

let provideAssembly (reqType:ProvidedTypeDefinition) assemblyPath =
    let existingAssembly = Assembly.LoadFrom(assemblyPath)

    for ty in providedAssembly.GetExportedTypes() do
        reqType.AddMember(ty)

    reqType
你也可以试试这个:

let provideAssembly (reqType:ProvidedTypeDefinition) assemblyPath =
    reqType.AddAssemblyTypesAsNestedTypesDelayed(fun() -> Assembly.LoadFrom assemblyPath)
    reqType
这一个将保留名称空间,因此C类型的声明如下

type C = T.SimpleLib.Class1

天哪,我真是太蠢了,我已经试过了,但是在我的代码中直接引用了生成的类型,所以我得到了编译错误。第一课学习不要->正确阅读错误消息。再次感谢
type C = T.SimpleLib.Class1