【问题标题】:F# build error: "No compiled representation for provided namespace"F# 构建错误:“没有为提供的命名空间编译的表示”
【发布时间】:2022-08-19 02:00:33
【问题描述】:

有没有人遇到过这个错误信息? Google 在源代码 (https://github.com/fsharp/fsharp/blob/master/src/fsharp/tast.fs) 中为我找到了它,但我丝毫不知道是什么原因造成的。

当我尝试将我的库项目从 .NET 5 升级到 .NET 6 时,这种情况就开始发生了,所以对我的问题的真正答案可能是对我在那里做错的解释。我所做的只是:

  1. 在 fsproj 中,将 \"TargetFramework\" 从 \"net5.0\" 更改为 \"net6.0\"
  2. 在我的 paket.dependencies 文件中,将 \"framework\" 从 \"net5.0\" 更改为 \"net6.0\"。 (我也尝试过注释掉“framework”这一行。)

    然后在运行 \"paket update\" 和 \"dotnet build\" 之后,我得到了一个模糊的错误。 (\“错误FS0192:内部错误:提供的命名空间没有编译表示\”)

    更新:在一些费力的代码注释/取消注释等之后,我相信我已经将其缩小到我的代码对 Fable.RegexProvider 程序集的使用。 (我使用 SafeRegex 组件。)RegexProvider 已经有几年没有更新了。我会提醒那边的人注意这个问题,如果/当我学到任何东西时,我会在这里发布更新。 (以防其他人遇到这种情况。)

  • 你在使用 Visual Studio 吗?什么版本?
  • 嗨@JimFoye,我正在使用 VS Code。不过,根据我上面的更新,罪魁祸首似乎是 Fable.RegexProvider 库。

标签: f# fable-f# paket


【解决方案1】:

万一其他人遇到这种情况,这里是解决方案(这是上面推荐的解决方案@CaringDev,尽管它仅适用于 Fable 3.7.18 及更高版本):

当我在 Fable.RegexProvider github 上提出这个问题时(请参阅此处的线程:https://github.com/fable-compiler/Fable.RegexProvider/issues/9),最初的想法是尝试使用 .NET 6 构建的 Fable.RegexProvider。但随后Alfonso Garcia-Caro 意识到随后对 Fable 的改进可能已经消除了对 SafeRegex 的需求。

他最终需要在 Fable 中进行一些调整,但从 3.7.18 版本开始,Fable 转译器支持使用 FSharp.Text.RegexProvider,因此现在不需要 Fable.RegexProvider。

【讨论】: