在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