【发布时间】:2021-10-17 14:38:50
【问题描述】:
我正在尝试在 macOS 上的 Mono 下构建 .NET Framework 4.7.2、F#、类库项目¹。
但是,当我在外部项目上添加依赖项²时,我变得无法构建;收到这样的错误 (full log):
$ msbuild FSharpMod.sln -restore -p:Configuration=Release
...
FSC : error FS0078: Unable to find the file 'System.Numerics.dll' in any of /Users/ec/.nuget/packages/krafs.rimworld.ref/1.3.3087/ref/net472 /Users/ec/Sync/Code/FSharpMod/Source/FSharpModLibrary /usr/local/Cellar/mono/6.12.0.122/lib/mono/fsharp/ [/Users/ec/Sync/Code/FSharpMod/Source/FSharpModLibrary/FSharpModLibrary.fsproj]
Done Building Project "/Users/ec/Sync/Code/FSharpMod/Source/FSharpModLibrary/FSharpModLibrary.fsproj" (default targets) -- FAILED.
Done Building Project "/Users/ec/Sync/Code/FSharpMod/FSharpMod.sln" (default targets) -- FAILED.
Build FAILED.
所以,supposedly、System.Numerics.dll 是 Mono 特有的东西。值得注意的是,如果我:
- 在 Windows 上构建这个简单的测试,即不在 Mono 下,
- 删除对外部依赖项的任何引用,
- 或将其切换到 C# 而不是 F#,
... 然后它编译得很好;我没有遇到这个问题。据我们所知,只有 macOS/Mono/external-dependency/F# 的特定组合开始抱怨System.Numerics.dll。
我的初步理解是,这可能是我的某种构建配置失败;但与我交谈过的人都无法找到造成这种情况的原因。希望对 Microsoft 构建系统、FSharp 或 Mono 有更深入了解的人能够提供帮助!
- 实际上只是来自 Windows 上的 Visual Studio 的 the four-line auto-generated starter F# project;没什么实质性的。
- 本例中的依赖是
Krafs.Rimworld.Ref;但我认为这并不重要——我用 ripgrep 挖掘了反编译的 ILSpy 输出,但找不到对System.Numerics的单个引用。这个
【问题讨论】:
-
日志表明您通过 Homebrew 安装了 Mono,因此一些引用被解析为
/usr/local/Cellar/mono/6.12.0.122/lib/mono/4.7.2-api/。这可能会以某种方式混淆 F# 编译器,但您可以在 GitHub github.com/dotnet/fsharp/issues 上与 F# 人员讨论。您是否尝试使用dotnet build? -
您可能希望将此问题标记为“F#”而不是“C#”。
标签: .net macos f# msbuild mono