#f# #f#-interactive #.net-5
#f# #f #-интерактивный #.net-5
Вопрос:
Я переношу довольно небольшой проект 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:UserskkkmaAppDataLocalTempnuget28772--091a5e4a-2a27-4d4d-9891-2b58055c5317Project.fsproj.fsx
Loading C:GitHubBerremanBerremanAnalyticsExamplesReferences.fsx]
namespace FSI_0002.Project
namespace FSI_0002
[Loading C:UserskkkmaAppDataLocalTempnuget28772--091a5e4a-2a27-4d4d-9891-2b58055c5317Project.fsproj.fsx]
namespace FSI_0003.Project
Binding session to 'C:WindowsMicrosoft.NETFramework64v4.0.30319System.Runtime.dll'...
Binding session to 'C:WindowsMicrosoft.NETFramework64v4.0.30319System.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:GitHubBerremanBerremanBerremanGeometry.fs:line 17
at Berreman.Geometry.ComplexMatrix3x3.get_identity() in C:GitHubBerremanBerremanBerremanGeometry.fs:line 307
at Berreman.MaterialProperties.Eps.fromRefractionIndex(RefractionIndex _arg1) in C:GitHubBerremanBerremanBerremanMaterialProperties.fs:line 70
at FSI_0004.opticalProperties(RefractionIndex refractionIndex) in C:GitHubBerremanBerremanAnalyticsExamplesGlass_01.fsx:line 51
at FSI_0004.getGlassInfo(Boolean useThickPlate, RefractionIndexThickness nh1, FSharpOption`1 nh2Opt, IncidentLightInfo light) in C:GitHubBerremanBerremanAnalyticsExamplesGlass_01.fsx:line 61
at <StartupCode$FSI_0004>.$FSI_0004.main@() in C:GitHubBerremanBerremanAnalyticsExamplesGlass_01.fsx:line 98
Stopped due to error
>
Когда я проверяю Project.fsproj.resolvedReferences.paths
из C:UserskkkmaAppDataLocalTempnuget28772--091a5e4a-2a27-4d4d-9891-2b58055c5317
(и это папка, созданная FSI при запуске скрипта) Я вижу, что оно начинается с C:Userskkkma.nugetpackagesmicrosoft.netframework.referenceassemblies.net481.0.0build.NETFrameworkv4.8FacadesSystem.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?
Комментарии:
1. .NET 5 fsi использует
dotnet fsi
для выполнения скриптов. Это то, что вы делаете?2. Я использую CTRL A, затем ALT ENTER в Visual Studio, и он запускает FSI. Так это всегда работало. Вывод приведен в вопросе выше.
3. Понял, да. VS использует .NET Framework для FSI, потому что VS сам является .NET Framework exe. Вам нужно будет выполнять свои скрипты отдельно от
dotnet fsi
.4. @PhillipCarter Вы хотите сказать, что невозможно запускать скрипты изнутри VS, и их нужно запускать вручную через
dotnet fsi
? Если это так, то это убивает цель. или у вас есть пример того, как заставить VS запускатьсяdotnet fsi
вместо justfsi
? Спасибо.5. В настоящее время их необходимо запускать с
dotnet fsi
VS и за его пределами. Будущая версия VS может предложить способ запуска сценариев, зависящих от .NET 5, из среды IDE.
Ответ №1:
Начиная с версии 16.9 Visual Studio 2019, вы можете включить опцию dotnet fsi
для запуска интерактивных скриптов F #. Это работает с кодом .NET 5.
Это задается с помощью Tools> Options> F # Tools> F # Interactive> Use .NET Core Scripting .
Полную информацию и инструкции можно найти по адресу https://devblogs.microsoft.com/dotnet/f-and-f-tools-update-for-visual-studio-16-9 /