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

7

我最近遇到了一个问题,似乎没有其他人遇到过(至少从我所知)。 我试图使用TypeProviders.SDK创建F#类型提供程序。

一旦我构建解决方案,就会出现错误:“FS0810,属性“CultureName”无法设置,\ LemonadeProvider \ paket-files \ fsprojects \ FSharp.TypeProviders.SDK \ src \ ProvidedTypes.fs”在解决方案的设计时项目的2090行和3162行再次出现。

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

PS:目前我只是尝试构建提供的模板,我没有更改代码或添加任何内容。 因此,我没有附加任何代码,但请随时要求。


你是用什么工具来构建它的?VisualStudio、VS Code、命令行...?在任何构建之前,你需要执行“dotnet tool restore”,然后执行“dotnet paket update”。你已经执行了这些步骤吗? - nilekirk
我已经尝试在命令行和VisualStudio上构建它。是的,我已经完成了“dotnet tool restore”和“dotnet paket update”步骤。 - Harsh Chaudhry
你解决了吗? - Mark Virchenko
2个回答

0

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

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

我所指的代码如下,并已添加两次到ProvidedTypes.fs:

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

我不知道是否有新的SDK解决了这个问题。但是在问这个问题的时候,这是对我有效的。


0

对应问题是 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: 通过'System.Attribute'引用的类型是在未被引用的程序集中定义的。您必须添加对程序集“netstandard”的引用。[C:\Users\user\source\repos\HelloWorldProvider\src\HelloWorldProvider.DesignTime\HelloWorldProvider.DesignTime.fsproj]


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