.net core F#类型提供程序:您能否在定义类型提供程序的同一项目中使用它?

.net core F#类型提供程序:您能否在定义类型提供程序的同一项目中使用它?,.net-core,f#,.net Core,F#,我遵循了有关F#类型提供程序的教程,提供了源代码 Program.fs: 开放系统。反射 打开Microsoft.FSharp.Core.CompilerServices 打开ProviderImplementation.ProvidedTypes [] 键入StringTypeProvider(配置:TypeProviderConfig)如下所示= 继承TypeProviderForNamespaces(配置) 让namespaceName=“Samples.StringTypeProvide

我遵循了有关F#类型提供程序的教程,提供了源代码

Program.fs

开放系统。反射
打开Microsoft.FSharp.Core.CompilerServices
打开ProviderImplementation.ProvidedTypes
[]
键入StringTypeProvider(配置:TypeProviderConfig)如下所示=
继承TypeProviderForNamespaces(配置)
让namespaceName=“Samples.StringTypeProvider”
让thisAssembly=Assembly.getExecutionGassembly()
设staticParams=[ProvidedStaticParameter(“值”,类型)]
让t=ProvidedTypeDefinition(thisAssembly,namespaceName,“StringTyped”,Some-typeof,hideObjectMethods=true)
不要定义属性参数(
参数=静态参数,
实例化函数=(有趣的typeName参数值->
将参数值与
|[|:?字符串作为值|]->
设ty=ProvidedTypeDefinition(
本届大会,
名称空间名称,
字体名,
某种类型的
)
let lengthProp=ProvidedProperty(
“长度”,
类型,
getterCode=fun->
)
ty.AddMember lengthProp
设charProps=value
|>序列图(趣味c->
设p=ProvidedProperty(
c、 ToString(),
类型,
getterCode=fun->
)
让doc=sprintf“字符%s”(c.ToString())
p、 AddXmlDoc文件
P
)
|>序号:toList
ty.addmembersdlayed(fun()->charProps)
让sanitized=value.Replace(“,”)
让valueProp=ProvidedProperty(
消毒,
类型,
getterCode=fun->
)
valueProp.AddXmlDoc“这是您给我的开始值”
ty.AddMember valueProp
设ctor=ProvidedConstructor(
参数=[],
invokeCode=fun args->obj@@@
)
ctor.AddXmlDoc“初始化awesomes中的
添加成员
让反向器=提供的方法(
methodName=“反向”,
参数=[],
returnType=typeof,
调用代码=(乐趣->
Seq.map(乐趣x->x.ToString())
|>序号:toList
|>List.rev
|>List.reduce(趣味acc el->acc+el)
@@>))
ty.AddMember反向器
泰
|用“不知道你在做什么”来表示失败
)
)
执行此操作。AddNamespace(namespaceName,[t])

[

事实上,您似乎没有像错误所说的那样定义名为
Samples
的模块或名称空间。它应该来自不同的文件吗?@FyodorSoikin我编辑了我的文章,长话短说,它不起作用。您确实在
Samples.StringTypeProvider中定义了名为
StringTyped>的类型吗e> 命名空间?@FyodorSoikin nope
StringTyped
是在
Program.fs
Ohhh中定义的。我突然明白了您要做什么。类型提供程序需要位于一个单独的程序集中。它需要在使用它的程序集中之前进行编译,以便F#编译器可以在编译使用它的程序集中运行类型提供程序。
  <FSharpPlayground>\Program.fs:3819 The namespace or module 'Samples' is not defined.
  <FSharpPlayground>\Program.fs:3862 The namespace or module 'Samples' is not defined.
  <FSharpPlayground>\Program.fs:3975 The type 'Object' does not define the field, constructor or member '☃'.
Program.fs(3, 43): [FS0039] The type 'StringTyped' is not defined in 'Samples.StringTypeProvider'. Maybe you want one of the following:
   StringTypeProvider