如何让 FSI 在 NET5 下工作并让愚蠢的 stackoverflow 消息 "Title cannot contain ..." 闭嘴?
How to make FSI work under NET5 and make stupid stackoverflow message "Title cannot contain ..." shut up?
我正在将一个相当小的 F# 项目从 Net Framework 迁移到 NET5。迁移非常简单,一切正常,包括测试。
但是,当我 运行 一些脚本时,我现在收到以下错误:
Microsoft (R) F# Interactive version 11.0.0.0 for F# 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved.
For help type #help;;
>
[Loading C:\Users\kkkma\AppData\Local\Temp\nuget772--091a5e4a-2a27-4d4d-9891-2b58055c5317\Project.fsproj.fsx
Loading C:\GitHub\Berreman\Berreman\Analytics\Examples\References.fsx]
namespace FSI_0002.Project
namespace FSI_0002
[Loading C:\Users\kkkma\AppData\Local\Temp\nuget772--091a5e4a-2a27-4d4d-9891-2b58055c5317\Project.fsproj.fsx]
namespace FSI_0003.Project
Binding session to 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.dll'...
Binding session to 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.Numerics.dll'...
System.TypeLoadException: Could not load type 'System.ICloneable' from assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
at Berreman.MathNetNumericsMath.complexDiagonalMatrix(Int32 n, Complex e)
at Berreman.Geometry.complexIdentityMatrix(Int32 n) in C:\GitHub\Berreman\Berreman\Berreman\Geometry.fs:line 17
at Berreman.Geometry.ComplexMatrix3x3.get_identity() in C:\GitHub\Berreman\Berreman\Berreman\Geometry.fs:line 307
at Berreman.MaterialProperties.Eps.fromRefractionIndex(RefractionIndex _arg1) in C:\GitHub\Berreman\Berreman\Berreman\MaterialProperties.fs:line 70
at FSI_0004.opticalProperties(RefractionIndex refractionIndex) in C:\GitHub\Berreman\Berreman\Analytics\Examples\Glass_01.fsx:line 51
at FSI_0004.getGlassInfo(Boolean useThickPlate, RefractionIndexThickness nh1, FSharpOption`1 nh2Opt, IncidentLightInfo light) in C:\GitHub\Berreman\Berreman\Analytics\Examples\Glass_01.fsx:line 61
at <StartupCode$FSI_0004>.$FSI_0004.main@() in C:\GitHub\Berreman\Berreman\Analytics\Examples\Glass_01.fsx:line 98
Stopped due to error
>
当我从 C:\Users\kkkma\AppData\Local\Temp\nuget772--091a5e4a-2a27-4d4d-9891-2b58055c5317
检查 Project.fsproj.resolvedReferences.paths
时(这是 FSI 在我 运行 脚本时创建的文件夹)我看到它从 C:\Users\kkkma\.nuget\packages\microsoft.netframework.referenceassemblies.net48.0.0\build\.NETFramework\v4.8\Facades\System.Runtime.InteropServices.RuntimeInformation.dll
开始并且它还有一些其他 Net Framework 解析的引用。这让我相信 FSI 以某种方式“决定”使用 Net Framework 而不是 NET 5。
文件fsi.runtimeconfig.json
包含正确的信息:
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "5.0.0"
}
}
}
有谁知道如何强制 FSI 选择 NET 5 而不是 Net Framework?
自 Visual Studio 2019 version 16.9 起,您可以启用一个选项以使用 dotnet fsi
到 运行 交互式 F# 脚本。这适用于 .NET 5 代码。
这是通过“工具”>“选项”>“F# 工具”>“F# 交互”>“使用 .NET Core 脚本”设置的。
可在 https://devblogs.microsoft.com/dotnet/f-and-f-tools-update-for-visual-studio-16-9/
找到完整的详细信息和说明
我正在将一个相当小的 F# 项目从 Net Framework 迁移到 NET5。迁移非常简单,一切正常,包括测试。
但是,当我 运行 一些脚本时,我现在收到以下错误:
Microsoft (R) F# Interactive version 11.0.0.0 for F# 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved.
For help type #help;;
>
[Loading C:\Users\kkkma\AppData\Local\Temp\nuget772--091a5e4a-2a27-4d4d-9891-2b58055c5317\Project.fsproj.fsx
Loading C:\GitHub\Berreman\Berreman\Analytics\Examples\References.fsx]
namespace FSI_0002.Project
namespace FSI_0002
[Loading C:\Users\kkkma\AppData\Local\Temp\nuget772--091a5e4a-2a27-4d4d-9891-2b58055c5317\Project.fsproj.fsx]
namespace FSI_0003.Project
Binding session to 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.dll'...
Binding session to 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.Numerics.dll'...
System.TypeLoadException: Could not load type 'System.ICloneable' from assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
at Berreman.MathNetNumericsMath.complexDiagonalMatrix(Int32 n, Complex e)
at Berreman.Geometry.complexIdentityMatrix(Int32 n) in C:\GitHub\Berreman\Berreman\Berreman\Geometry.fs:line 17
at Berreman.Geometry.ComplexMatrix3x3.get_identity() in C:\GitHub\Berreman\Berreman\Berreman\Geometry.fs:line 307
at Berreman.MaterialProperties.Eps.fromRefractionIndex(RefractionIndex _arg1) in C:\GitHub\Berreman\Berreman\Berreman\MaterialProperties.fs:line 70
at FSI_0004.opticalProperties(RefractionIndex refractionIndex) in C:\GitHub\Berreman\Berreman\Analytics\Examples\Glass_01.fsx:line 51
at FSI_0004.getGlassInfo(Boolean useThickPlate, RefractionIndexThickness nh1, FSharpOption`1 nh2Opt, IncidentLightInfo light) in C:\GitHub\Berreman\Berreman\Analytics\Examples\Glass_01.fsx:line 61
at <StartupCode$FSI_0004>.$FSI_0004.main@() in C:\GitHub\Berreman\Berreman\Analytics\Examples\Glass_01.fsx:line 98
Stopped due to error
>
当我从 C:\Users\kkkma\AppData\Local\Temp\nuget772--091a5e4a-2a27-4d4d-9891-2b58055c5317
检查 Project.fsproj.resolvedReferences.paths
时(这是 FSI 在我 运行 脚本时创建的文件夹)我看到它从 C:\Users\kkkma\.nuget\packages\microsoft.netframework.referenceassemblies.net48.0.0\build\.NETFramework\v4.8\Facades\System.Runtime.InteropServices.RuntimeInformation.dll
开始并且它还有一些其他 Net Framework 解析的引用。这让我相信 FSI 以某种方式“决定”使用 Net Framework 而不是 NET 5。
文件fsi.runtimeconfig.json
包含正确的信息:
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "5.0.0"
}
}
}
有谁知道如何强制 FSI 选择 NET 5 而不是 Net Framework?
自 Visual Studio 2019 version 16.9 起,您可以启用一个选项以使用 dotnet fsi
到 运行 交互式 F# 脚本。这适用于 .NET 5 代码。
这是通过“工具”>“选项”>“F# 工具”>“F# 交互”>“使用 .NET Core 脚本”设置的。
可在 https://devblogs.microsoft.com/dotnet/f-and-f-tools-update-for-visual-studio-16-9/
找到完整的详细信息和说明