仅当从GitHub部署时,Azure中的F#编译错误

仅当从GitHub部署时,Azure中的F#编译错误,azure,f#,kudu,Azure,F#,Kudu,我正在从GitHub存储库将一个C#网站部署到Azure。这个网站引用了几个F#库,它们在我的机器上编译得很好,但在Azure中构建失败,出现了许多编译错误 以下是生成日志的一个片段: FS0001: A generic construct requires that the type 'Company' have a public default constructor [C:\DWASFiles\Sites\eureka-servicestack-poc\VirtualDirectory0\

我正在从GitHub存储库将一个C#网站部署到Azure。这个网站引用了几个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#版本相同,我在解决方案中包含了FSharp.Core dll,并参考了本地版本。这没有帮助,但它删除了一条警告,即找不到该文件的版本4.3.1

有可能我正在运行另一个版本的F#编译器吗?我该如何检查?到目前为止,它一直运行良好,这让我怀疑某些东西的版本控制有一些细微的差别。不幸的是,要了解构建环境中实际发生的事情似乎相当困难。这是一个免费的网站Azure网站,看起来你无法直接访问它


我现在可能会围绕个别问题工作,但这里似乎有一个更深层次的问题

在使用不同版本的F#编译器时,这是一个问题。使用Visual Studio 2013 RC时,我使用的是3.1版本,这导致我的特定问题没有出现

这个问题很难确定,因为在Visual Studio中将我的F#项目更改为使用3.0编译器没有任何效果(它仍然编译得很好)。我甚至在VisualStudio2012中打开了这个解决方案,并且编译得足够好。直到我在VS 2012中从头开始创建一个新项目时,我才开始出现与服务器上相同的编译错误。所以我猜这一定是创建的项目文件中的一个错误(或者至少不是很理想的特性)。我不确定这是否应该被归类为VS2013的bug,特别是因为我不知道错误的确切原因


因此,在Azure(或者这是Kudu的东西?)支持3.1编译器之前,一个简单的解决方案是在VS 2012中重新创建项目文件,或者将未编译的代码复制到可以测试修复程序的测试解决方案中。

F#4.3.1?你在使用VS2013吗?这听起来和我在中回答的问题不完全一样,但是阅读这篇文章可能会给你一些关于如何追踪问题的想法。是的,这是VS 2013 RC。它是否配备了比Azure更新的F#编译器?我尝试按照链接问题中的建议构建部署包,但所有预期的DLL都包括在内。是的,VS2013包括F#3.1和.NET 4.5.1。由于这些仍然是RCs,我怀疑Azure是否已经升级以支持它们(尽管我肯定可能是错的)。您最好的选择是使用VS2012(如果可能的话),并确保您的所有项目(包括您的C#项目)都以.NET 4.0为目标。当然,必须能够将这些更改改装到VS 2013中创建的项目中?在不同版本中创建的项目之间,您观察到了哪些变化?我同意,但我看不到任何明显的变化。到目前为止,我已经接受了在推到云端时可能会出现编译器错误的观点,并且没有花更多的时间来试验项目文件,但如果有兴趣,这对任何人来说都应该很简单。