我正在从github存储库向azure部署一个c#网站。这个网站引用了几个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网站,似乎你无法直接访问它。
我现在也许可以解决个别问题,但这里似乎有一个更深层次的问题。
1条答案
按热度按时间eagi6jfj1#
这是使用不同版本的f#编译器时出现的问题。在使用VisualStudio2013 rc时,我使用的是3.1版本,该版本有一些改进,没有出现我的特定问题。
这个问题很难识别,因为在visualstudio中将我的f#项目更改为使用3.0编译器没有任何效果(它仍然编译得很好)。我甚至在visualstudio2012中打开了这个解决方案,它编译得足够好了。直到我在VS2012中从头开始创建一个新项目时,我才开始出现与服务器上相同的编译错误。所以我猜这一定是创建的项目文件中的错误(或者至少不是很理想的特性)。我不确定这是否应该被归类为VS2013的一个bug,特别是因为我不知道到底是什么导致了这个错误。
因此,在azure(或者这是kudu的东西?)支持3.1编译器之前,最简单的解决方案是要么在vs2012中重新创建项目文件,要么将没有编译的代码复制到可以测试修复的测试解决方案中。