Развертывание веб-приложения с использованием FSharp.Data на веб-сайтах Azure.

Это аналогичный вопрос Как развернуть веб-приложение с помощью F# на веб-сайте Azure. В моем проекте C#/F# MVC используется пакет FSharp.Data NuGet, и процесс развертывания завершается сбоем с сообщением

Не удалось найти сборку «FSharp.Data, версия = 1.1.4.0, культура = нейтральная, PublicKeyToken = null».

Единственный эффективный обходной путь, который я вижу, — заменить все ссылки NuGet (FSharp.Data, FSharp.Data.DesignTime, FSharp.Data.Experimental, FSharp.Data.Experimental.DesignTime) явными ссылками на библиотеки DLL и скопировать локальные установить на истину. Я не хочу выбрасывать ребенка NuGet вместе с водой из ванны таким образом. Есть ли более хитрый способ? В качестве альтернативы, есть ли открытый вопрос, к которому я могу добавить свой голос?


person Rob Lyndon    schedule 20.06.2013    source источник
comment
Этот пост в блоге помогает? sireel-world.azurewebsites.net/sir-eel-visions/ WATK-FS-Pt2. Есть несколько проблем с шаблоном проекта F#, которые делают развертывание git немного сложным. Если у вас все еще есть проблемы, было бы здорово, если бы вы могли создать проблему здесь — github. com/projectkudu/kudu/issues/new и, возможно, отправить образец репозитория, который не работает, на GitHub.   -  person Pranav    schedule 21.06.2013
comment
Спасибо, Пранав. Я скоро загружу избранные моменты моего проекта. Вы, вероятно, не захотите вникать во все скучные детали проекта в его нынешнем виде.   -  person Rob Lyndon    schedule 21.06.2013


Ответы (1)


Вы можете добавить ‹dependentAssembly›. элемент web.config, чтобы убедиться, что сборка FSharp.Data включена при развертывании проекта в Azure. Я уже использовал этот метод при развертывании смешанных проектов F#/C# ASP.NET MVC в Azure; прошло некоторое время, но я не думаю, что мне нужно было изменить настройку Copy Local в сборках, на которые ссылаются (которые я добавил через NuGet).

В любом случае, запись, которую вам нужно добавить, должна выглядеть примерно так:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Data" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Основываясь на комментарии Роба о том, что он по-прежнему получает то же сообщение об ошибке, вот следующие шаги, которые я предприму для диагностики проблемы.

  • Создайте пакет развертывания Azure (вам не нужно его развертывать). По завершении сборки найдите файл пакета развертывания (*.cspkg); на самом деле это просто zip-файл, поэтому извлеките содержимое в папку, например, с помощью 7-zip . В извлеченной папке должен быть один файл с расширением *.cssx, который намного больше остальных; это также zip-файл, поэтому распакуйте его в другую папку, а затем перейдите в эту папку с помощью проводника Windows. Оттуда перейдите в папку sitesroot, затем в папку 0. Теперь вы должны посмотреть в корень вашего веб-сайта (то есть файлы/папки, которые будут скопированы в C:\inetpub\wwwroot на веб-сервере). Проверьте папку bin — вы видите там сборку FSharp.Data? Если нет, это проблема сборки/упаковки, а не проблема сервера; если вы видите сборку FSharp.Data, переходите к следующему шагу.
  • Разверните проект в Azure, а затем подключите удаленный рабочий стол к одному из экземпляров, на котором размещен ваш проект. (Существует специальная процедура для включения удаленного рабочего стола на экземплярах — если вы еще этого не сделали, вам необходимо сделать это, прежде чем продолжить.) После входа в систему вы можете открыть Просмотр событий< /em> (в разделе Инструменты администрирования); посмотрите журнал приложений в разделе журналы Windows — есть ли там какие-либо ошибки ASP.NET? Если это так, щелкните их и посмотрите на сообщение об ошибке, оно может содержать сообщение об исключении .NET о невозможности разрешить сборку FSharp.Data. Если это так, перейдите к C:\inetpub\wwwroot\ и убедитесь, что FSharp.Data находится в папке bin веб-сайта. Если это так, перейдите к следующему шагу.
  • Если сборка FSharp.Data правильно упаковывается и развертывается вместе с вашим веб-проектом, то может возникнуть проблема, связанная с тем, что она (или одна из ее зависимостей) является сборкой .NET 4.0, когда ваш проект работает на .NET 4.5. Войдя в экземпляр Azure (через удаленный рабочий стол), вы можете включить ведение журнала Fusion и использовать средство просмотра журнала Fusion, чтобы отслеживать, как CLR пытается загрузить сборку. Если вы отследите проблему, то наиболее вероятным способом ее устранения будет добавление элемента <bindingRedirect> в запись <dependentAssembly>, созданную вами в файле web.config. Вот как я это сделал, чтобы оригинальный F# PowerPack (который предназначался для версии .NET 2.0 FSharp.Core) работал в моем проекте F#/C# на .NET 4.0:

    <dependentAssembly>
      <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    
person Jack P.    schedule 20.06.2013
comment
Спасибо, Джек. Я попробовал, но без радости. Интересно, это потому, что библиотека FSharp.Data представляет собой сборку .NET 4.0, а мой проект MVC — сборку .NET 4.5. - person Rob Lyndon; 21.06.2013
comment
@RobLyndon Вы получили другое сообщение об ошибке после добавления записи в свой web.config? Кроме того, вы установили версию целевой платформы вашего проекта F # на .NET 4.5? В сообщении блога, связанном с комментарием Пранава, говорится, что в шаблоне проекта C#/F# MVC есть ошибка, из-за которой проект C# будет настроен на .NET 4.5, а проект F# будет настроен только на .NET 4.0 (поэтому его необходимо изменен вручную). - person Jack P.; 21.06.2013
comment
К сожалению, это было то же самое сообщение об ошибке. Поскольку я добавил свою библиотеку классов F# на более позднем этапе, здесь не используется стандартный шаблон, и все настроено на версию 4.5. - person Rob Lyndon; 21.06.2013
comment
@RobLyndon Я добавил некоторые подробности о том, как я диагностировал ту же / похожую проблему, когда столкнулся с ней - возможно, это будет полезно, чтобы помочь вам отследить проблему. - person Jack P.; 22.06.2013