如何解决如何使FSI在NET5下工作并关闭愚蠢的stackoverflow消息“标题不能包含...”?
我正在将一个相当小的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\nuget\28772--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\nuget\28772--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
>
当我从Project.fsproj.resolvedReferences.paths
中检查C:\Users\kkkma\AppData\Local\Temp\nuget\28772--091a5e4a-2a27-4d4d-9891-2b58055c5317
(这是运行脚本时由FSI创建的文件夹)时,我发现它从C:\Users\kkkma\.nuget\packages\microsoft.netframework.referenceassemblies.net48\1.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 开始,您可以启用 on 选项以使用 dotnet fsi
运行交互式 F# 脚本。这适用于 .NET 5 代码。
这是通过“工具”>“选项”>“F# 工具”>“F# 交互”>“使用 .NET Core 脚本”设置的。
可以在 https://devblogs.microsoft.com/dotnet/f-and-f-tools-update-for-visual-studio-16-9/
找到完整的详细信息和说明版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。