gpt4 book ai didi

f# - 如何引用 TypeProvider 创建的 'generated' 类型

转载 作者:行者123 更新时间:2023-12-02 01:51:19 27 4
gpt4 key购买 nike

我正在尝试为创建生成类型的 Excel 文件实现类型提供程序。我的目标是能够从 C# 引用这些类型。

如果我使用删除类型创建类型提供程序,我可以使用以下语法从 F# 引用它:

type DataTypesTest = ExcelFile<"tests\ExcelProvider.Tests\DataTypes.xlsx">

如果我将我的类型标记为已生成。上面的语法会产生这个错误:
A direct reference to the generated type 'ExcelFile' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.

如何在我的 F# 代码中引用参数化生成的类型?此类提供程序的来源可在 GitHub 上找到。

最佳答案

我相信问题可能是由于您在类型提供程序中构建类型的方式,而不是您在使用站点上的代码。对于生成或删除的类型提供程序,使用类型提供程序的代码应该相同。我在尝试使用生成的类型提供程序正确构建类型时发生了类似的错误。

在您的情况下,您的类型源自 ExcelFileInternal ,所以你需要使用 BaseConstructorCall ,而不仅仅是构造函数逻辑。这应该类似于:

// add a parameterless constructor which loads the file that was used to define the schema
let ctor = ProvidedConstructor([])
ctor.BaseConstructorCall <- fun [] -> <@@ ExcelFileInternal(resolvedFilename, range) @@>
providedExcelFileType.AddMember(ctor)

请注意,所有构造函数都需要这种类型的更改。

关于f# - 如何引用 TypeProvider 创建的 'generated' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com