我正在尝试在我的F#项目中使用Azure存储类型提供程序:
Install-Package FSharp.Azure.StorageTypeProvider
它在本地工作,但是当我从我的本地Git存储库部署到我的Azure Web应用程序时,我收到以下错误
remote:更新分支'master'。
remote:更新子模块。
remote:准备部署提交ID'f67901b428'。
remote:生成部署脚本。
remote:运行部署命令......
remote:处理.NET Web应用程序部署。
remote:packages.config中列出的所有软件包都已安装。
remote:packages.config中列出的所有软件包都已安装。
远程: d:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets(1605,5): 警告MSB3247:发现不同版本之间的冲突 相同的依赖集会。 [d:\家\站点\库\ FlunSharp \ FlunSharp.fsproj]
remote:FSC:错误FS3031:类型提供程序 'd:\家\网站\库\包\ FSharp.Azure.StorageTypeProvider.1.2.0 \ LIB \ net40 \ FSharp.Azure.StorageTypeProvider.dll' 报告错误:程序集属性'TypeProviderAssemblyAttribute' 指设计器组件'FSharp.Azure.StorageTypeProvider' 无法加载或不存在。无法加载文件或程序集 'FSharp.Core,Version = 4.3.1.0,Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。该 系统找不到指定的文件。 [d:\家\站点\库\ FlunSharp \ FlunSharp.fsproj]
remote:FSC:警告FS3005:参考组件 'd:\家\网站\库\包\ FSharp.Azure.StorageTypeProvider.1.2.0 \ LIB \ net40 \ FSharp.Azure.StorageTypeProvider.dll' 具有汇编级别属性 'Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute' 但没有找到公共类型提供程序类 [d:\家\站点\库\ FlunSharp \ FlunSharp.fsproj]
remote:exitCode = 1失败, 命令= “d:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ MSBuild.exe” “D:\ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj”/ nologo / verbosity:m / t:Build / t:pipelinePreDeployCopyAllFilesToOneFolder / P:_PackageTempDir = “d:\本地\ TEMP \ 3ec76803-496c-41df-AD73-f8bc79256ad9”; AutoParameterizationWebConfigConnectionStrings = FALSE;配置=推出 / P:SolutionDir = “d:\家\站点\库\”
remote:网站部署期间发生错误。
远程:
remote:错误 - 提交给远程存储库的更改但部署 到网站失败。
有什么建议吗?
答案 0 :(得分:1)
我们在chat here
中讨论了这个问题基本上这是服务器上的MSBuild如何检测正确的F#编译器来构建项目的问题(3.0 vs 3.1)
解决方法是通过在站点上设置看起来像这样的应用程序设置来指定另一个MSBuild版本
MSBUILD_PATH = D:\Program Files (x86)\MSBuild\12.0\Bin\amd64\MSBuild.exe
但是,正确的修复应该放在fsproj
文件中。特别是本节
<!-- F# targets -->
<Choose>
<When Condition="'$(VisualStudioVersion)' == '11.0'">
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</Otherwise>
</Choose>
<Import Project="$(FSharpTargetsPath)" />
应该更新到
<!-- F# targets -->
<PropertyGroup>
<VisualStudioVersion>12.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
<Import Project="$(FSharpTargetsPath)" />
我认为这是WebSharper模板的一个问题,它不能在项目文件中设置正确的visual studio版本。
答案 1 :(得分:0)
我怀疑你遇到的问题与我将F#部署到Azure的问题类似。我遇到的问题是构建系统没有正确地获取F#引用。我不得不手动添加对路径的引用,并手动将.dll引用移动到最终解决方案的输出路径中。
http://indiedevspot.com/2015/02/18/deploying-f-web-job-to-azure/