Как заставить FSI работать под NET5 и заставить замолчать глупое сообщение stackoverflow «Заголовок не может содержать …»?

#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 вместо just fsi ? Спасибо.

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 /