无法构建 F# 类型提供程序 SDK

Not being able to build F# type provider SDK

我终于遇到了一些其他人似乎没有遇到过的事情(至少据我所知)。我尝试使用 TypeProviders.SDK.

构建 F# 类型的提供程序

我一构建解决方案就收到错误消息:“FS0810,属性 'CultureName' 无法设置,\LemonadeProvider\paket-files\fsprojects\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs”在解决方案的设计时项目中的第 2090 行和第 3162 行。

我认为这没有用,但测试项目也失败了,因为它找不到 LemonadeProvider.Runtime.dll。我假设这将在运行时项目成功构建时创建。

PS:截至目前,我只是尝试构建提供的模板,我没有更改代码或向其中添加任何内容。因此我没有附上任何代码,但请随时索取。

对应的问题是https://github.com/fsprojects/FSharp.TypeProviders.SDK/issues/353

已知解决方法

将最低目标更改为 net461。将 net45 的所有实例替换为 net461,但 netfx.props 除外,您可以在其中删除引用 net45* 框架的行(我怀疑删除这些行严格来说是不必要的)。


我做了这个解决方法,但现在面临这些类型的错误:(比如 2000 个)

C:\Users\user\source\repos\HelloWorldProvider\paket-files\fsprojects\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs(34,7): error FS0074: The type referenced through 'System.Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard'. [C:\Users\user\source\repos\HelloWorldProvider\src\HelloWorldProvider.DesignTime\HelloWorldProvider.DesignTime.fsproj]

我发现问题出在 SDK 创建的 ProvidedTypes.fs 和 ProvidedTypes.fsi 文件上。

当我用“SDK-dsyme-patch-7”中找到的文件替换文件时,问题就解决了,这些文件为原始 SDK 中缺少的不同 .Net 环境提供了兼容性。可能还有其他差异,但这是我发现的差异,它为我解决了问题。 这些文件可以在 dsyme 补丁的 '/src/' 下找到。

我指的代码如下,在ProvidedTypes.fs中添加了两次:

#if NETSTANDARD
            asmName.CultureName <- System.Globalization.CultureInfo.InvariantCulture.Name
    #else
            asmName.CultureInfo <- System.Globalization.CultureInfo.InvariantCulture
    #endif
            asmName

不知道有没有新的SDK解决了这个问题。但在提出问题时,这对我有用。