Ошибки компиляции F# в Azure только при развертывании из GitHub

Я развертываю веб-сайт C# в Azure из репозитория GitHub. Этот веб-сайт ссылается на пару библиотек F#, и они прекрасно компилируются на моем компьютере, но в Azure сборка завершается с ошибкой компиляции.

Вот фрагмент журнала сборки:

FS0001: A generic construct requires that the type 'Company' have a public default constructor [C:\DWASFiles\Sites\eureka-servicestack-poc\VirtualDirectory0\site\repository\Eureka.ServiceStack.FSharp.Poc\Services\Services.fsproj]
C:\DWASFiles\Sites\eureka-servicestack-poc\VirtualDirectory0\site\repository\Eureka.ServiceStack.FSharp.Poc\Services\CompaniesService.fs(28,17): error FS0039: The field, constructor or member 'PopulateWith' is not defined [C:\DWASFiles\Sites\eureka-servicestack-poc\VirtualDirectory0\site\repository\Eureka.ServiceStack.FSharp.Poc\Services\Services.fsproj]
C:\DWASFiles\Sites\eureka-servicestack-poc\VirtualDirectory0\site\repository\Eureka.ServiceStack.FSharp.Poc\Services\AppHost.fs(17,55): error FS0072: Lookup on object of indeterminate type based on information prior to this program point. A type annotation may be needed prior to this program point to constrain the type of the object. This may allow the lookup to be resolved. [C:\DWASFiles\Sites\eureka-servicestack-poc\VirtualDirectory0\site\repository\Eureka.ServiceStack.FSharp.Poc\Services\Services.fsproj]
An error has occurred during web site deployment.

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

Чтобы убедиться, что у меня одна и та же версия F# в обоих местах, я включил dll FSharp.Core в решение и ссылаюсь на локальную версию. Это не помогло, но убрало предупреждение о том, что не может найти версию 4.3.1 файла.

Возможно ли, что я использую другую версию компилятора F# и как это проверить? До сих пор он работал нормально, что заставляет меня подозревать небольшую разницу в версиях чего-либо. К сожалению, довольно сложно понять, что на самом деле происходит в среде сборки. Это бесплатный веб-сайт Azure, и не похоже, что вы получите к нему прямой доступ.

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


person Morten Christiansen    schedule 22.09.2013    source источник
comment
F# 4.3.1? Вы используете VS2013?   -  person Jack P.    schedule 22.09.2013
comment
Это не похоже на ту же проблему, на которую я ответил в Развертывание веб-приложения с использованием FSharp.Data на веб-сайтах Azure, но чтение этого может дать вам некоторые идеи о том, как отследить проблему.   -  person Jack P.    schedule 22.09.2013
comment
Да, это VS 2013 RC. Поставляется ли он с более новым компилятором F#, чем у Azure?   -  person Morten Christiansen    schedule 22.09.2013
comment
Я попытался создать пакет развертывания, как это было предложено в связанном вопросе, но все ожидаемые библиотеки DLL были включены.   -  person Morten Christiansen    schedule 22.09.2013
comment
Да, VS2013 включает F# 3.1 и .NET 4.5.1. Поскольку это все еще RC, я сомневаюсь, что Azure еще не был обновлен для их поддержки (хотя я, конечно, могу ошибаться). Лучше всего было бы использовать VS2012 (если возможно) и убедиться, что вы ориентируетесь на .NET 4.0 во всех своих проектах (включая проекты C#).   -  person Jack P.    schedule 23.09.2013
comment
Проекты F # отлично работают в VS 2012 на моей локальной машине, так что это не проблема.   -  person Morten Christiansen    schedule 23.09.2013


Ответы (1)


Это оказалось проблемой при использовании разных версий компилятора F#. Используя Visual Studio 2013 RC, я использовал версию 3.1, в которой были некоторые улучшения, в результате чего мои конкретные проблемы не появляются.

Проблема была затруднена для выявления, потому что изменение моего проекта F # для использования компилятора 3.0 в Visual Studio не имело никакого эффекта (он все еще скомпилировался просто отлично). Я даже открыл решение в Visual Studio 2012, и оно достаточно хорошо скомпилировалось. И только когда я создал новый проект с нуля в VS 2012, я начал получать те же ошибки компиляции, что и на сервере. Поэтому я предполагаю, что это должна быть ошибка (или, по крайней мере, не очень желательная функция) в созданном файле проекта. Я не уверен, следует ли классифицировать это как ошибку в VS 2013, тем более что я точно не знаю, что вызывает ошибку.

Таким образом, простое решение до тех пор, пока Azure (или это дело Kudu?) не поддержит компилятор 3.1, состоит в том, чтобы либо воссоздать файл проекта в VS 2012, либо скопировать код, который не компилируется, в тестовое решение, где можно протестировать исправления.

person Morten Christiansen    schedule 26.09.2013
comment
Конечно, должна быть возможность внести изменения в проект, созданный в VS 2013? Какие изменения вы наблюдали между проектами, созданными в разных версиях? - person MEMark; 01.11.2013
comment
Я согласен, но я не мог видеть ничего очевидного. До сих пор я просто смирился с тем, что могу получить ошибки компилятора при отправке в облако, и не тратил больше времени на эксперименты с файлами проекта, но это должно быть просто для всех, если они заинтересованы. - person Morten Christiansen; 03.11.2013