【发布时间】:2013-03-02 18:26:15
【问题描述】:
我创建了一个简单的生成类型提供程序,它采用程序集的路径重新组织类型,将它们置于类型提供程序命名空间下,(如果您愿意,可以进行内部化)。
相关代码的链接在这里 https://github.com/colinbull/Playground
现在似乎提供了正确的类型,
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
因为在 VS 中显示没有任何报告错误。但是,当我编译此程序集时,IL 似乎发出错误并出现以下错误。
错误 1:写入二进制文件 'obj\Debug\TypeProviders.Tests.exe' 时出现问题:程序类型的 pass3 错误,错误:mref = ".ctor" 的 GetMethodRefAsMethodDefIdx 错误,错误:' 类型的异常Microsoft.FSharp.Compiler.AbstractIL.ILBinaryWriter+MethodDefNotFound' 被抛出。 FSC 1 1 TypeProviders.Tests
samples pack 中给出的生成类型的示例似乎没有定义任何StaticParameters,这需要返回具有所提供类型名称的类型。在这种情况下,我如何在提供的程序集中发出类型?目前我正在做以下事情
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
提前致谢
【问题讨论】:
标签: f# type-providers f#-3.0