【问题标题】:Intellisense not working for F# type providerIntellisense 不适用于 F# 类型提供程序
【发布时间】:2014-01-31 23:06:22
【问题描述】:

我创建了一个简单的类型提供程序,我想在程序集中公开一些预生成的类型,如下所示:

[<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

它可以按预期编译、运行和工作,但由于某种原因,Circle 没有出现在 Test.TypeLib 的 Intellisense 列表中。此外,当我将鼠标悬停在Circle 上时,它会显示A reference to type 'TestType.Circle' in assembly 'TestTypes' was found, but the type could not be found in that assembly.

我做错了什么?

更新:根据 Dmitry 的建议,我查看了 related question 并下载了 associated type provider,它正在尝试做类似于我正在做的事情。不幸的是,在我的机器上,该提供程序的行为与我的相同,即它为命名空间提供 Intellisense,但不为类型提供。所以我不知道它是否可能是我的配置特有的东西还是什么。

【问题讨论】:

  • 你用Reflector或者你最喜欢的反汇编工具打开了组件吗?可能值得一看。
  • 这里是类似问题的答案stackoverflow.com/questions/15078419/…
  • 更新了问题并提供了更多信息。

标签: f# type-providers


【解决方案1】:

嗯,这不是我的代码。事实证明,当我使用链接示例中包含的确切 ProvidedTypes-head.fs 时,一切都会正常运行。但是,当我使用不同的版本时,例如 FSharp.Data 中的 ProvidedTypes.fs,它就会出现错误的行为。我不确定导致问题的它们之间的区别是什么。我也不确定在哪里可以找到该文件的“官方”版本,如果确实存在的话。

更新:貌似正式版是here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多