F#类型提供程序的Intellisense无法工作

5
我创建了一个简单的类型提供程序,希望将一些预生成的类型暴露在一个程序集中,如下所示:
[<TypeProvider>]
type TestProvider() as this =
    inherit TypeProviderForNamespaces()
    let providedType = ProvidedTypeDefinition(Assembly.GetExecutingAssembly(), "Test", "TypeLib", None)
    do let assembly = Assembly.LoadFrom @"C:\Some\Long\Path\TestTypes.dll"
       // Get same problem with providedType.AddAssemblyTypesAsNestedTypesDelayed(),
       // which is what I really want to use
       providedType.AddMember(assembly.GetType("TestTypes.Circle"))
       this.AddNamespace("Test", [providedType])

我从另一个项目中使用此提供程序,如下所示:

// Circle member not showing up under TypeLib
type Circle = Test.TypeLib.Circle

let c = Circle()
c.Radius <- 4.
printfn "%f" c.Radius
System.Console.ReadKey() |> ignore

它被编译、运行并按预期工作,但由于某种原因,Intellisense列表中的Circle没有显示在Test.TypeLib中。当我悬停在Circle上时,它说:在程序集'TestTypes'中找到了对类型'TestType.Circle'的引用,但是在该程序集中找不到该类型。

我做错了什么?

更新:根据Dmitry的建议,我查看了相关问题并下载了相关类型提供程序,该提供程序试图执行与我的类似的操作。不幸的是,在我的计算机上,该提供程序的行为与我的相同,即它为命名空间提供Intellisense,但不提供类型。因此,我不知道它是否可能是与我的配置有关的特定问题。


你是否在Reflector或你最喜欢的反汇编工具中打开了该程序集?也许值得一看。 - Craig Stuntz
这里是类似问题的答案 https://dev59.com/Hm7Xa4cB1Zd3GeqPvOpv#15079605 - Dmitry Morozov
更新了附加信息的问题。 - luksan
1个回答

1
好的,这不是我的代码。事实证明,当我使用链接示例中包含的确切的ProvidedTypes-head.fs时,一切都像应该的那样工作。然而,当我使用另一个版本,例如来自FSharp.DataProvidedTypes.fs时,它具有错误的行为。我不确定它们之间的差异是什么导致了这个问题。我也不知道在哪里找到“官方”版本的文件,如果确实存在的话。
更新:看起来官方版本在这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接