Функция Azure: "не удается загрузить один или несколько запрошенных типов. Получить свойство LoaderExceptions для получения дополнительных сведений"

у меня есть функция f# Azure, которая терпит неудачу, странным образом, и не знаю, как подойти к исправлению проблемы. Я создал минимальное повторение фактического случая ниже. Тестовая функция запускается вручную и использует FSharp.Компилятор.Служба как зависимость, как указано в project.json ниже:

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "FSharp.Compiler.Service": "11.0.6"
      }
    }
  }
}

на run.fsx файл выглядит так:

open System

open Microsoft.FSharp.Compiler
open Microsoft.FSharp.Compiler.Ast
open Microsoft.FSharp.Compiler.Interactive.Shell

let Run(input: string, log: TraceWriter) =

    // code here that uses FsiEvaluationSession
    // and runs just fine

    log.Info "I RAN"

пока все хорошо. Часть, которая меня озадачивает, заключается в том, что если я добавлю следующую функцию выше Run,

// same dependencies as before
open Microsoft.FSharp.Compiler.Interactive.Shell

let foo (longIdent:LongIdent) =
    // version 1
    // "FOO"
    // version 2
    // longIdent.ToString ()
    // version 3
    longIdent |> List.map string 

let Run(input: string, log: TraceWriter) =
    // same as before

отдельный раздел, удалив 1 работает нормально, удалив раздел 2 отлично работает, удалив раздел 3 причины ад, чтобы вырваться на свободу. Функция компилируется, но при ее запуске возникает следующее исключение:

Exception while executing function: Functions.fsc-1. mscorlib: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

... что меня озадачивает, потому что

  1. foo даже нигде не называется
  2. подпись и 2-й вариант, как использовать LongIdent, поэтому этот тип, похоже, не является источником проблемы.

любое предложение о том, как подойти к проблеме и какова сама проблема, было бы очень оценено - я даже не знаю, с чего начать, и тот же код отлично работает в локальном скрипте.

2 ответов


Я считаю, что причина этого в том, что SDK функций Azure зависит от FSharp.Компилятор.Сервис (FCS) версии 9.0.1. Это означает, что при попытке загрузить другую версию FCS вы получите уже загруженную версию 9.0.1.

это работает до тех пор, пока общедоступный API используемой версии FCS соответствует общедоступному API версии 9.0.1, но когда есть различия, он аварийно завершит работу, потому что ваш код предполагает, что общедоступный API выглядит иначе. Я полагаю это может вызвать проблему здесь, хотя я не уверен на 100%, как (возможно,LongIdent теперь это отличается от того, что было в версии 9.0.1?)

тот же вопрос раньше случалось с поддельными, который также связывает FCS и предотвратил загрузку различных версий. Один из вариантов -переименовать сборку, чтобы избежать столкновения.


Я также получил ту же ошибку, я решил ее следующим образом обходной путь, пожалуйста, обратитесь, если это работает для вас также.

  • щелкните правой кнопкой мыши проект и выберите Свойства.
  • перейти на вкладку отладки и создать профиль со ссылкой на ниже скриншот.

Примечание: замените имя Пользователя своим именем пользователя.

Project Properties