Implementar el proveedor de tipo de almacenamiento F # Azure para implementar en la aplicación web Azure

Intento utilizar el proveedor de tipo de almacenamiento de Azure en mi proyecto de F #:

Install-Package FSharp.Azure.StorageTypeProvider 

Funciona de forma local, pero cuando implemento desde mi repository local de Git a mi aplicación web de Azure, obtengo los siguientes errores

remoto: actualización de la twig 'master'.

remoto: Actualizando submodules.

remote: preparación de la implementación para la identificación de confirmación 'f67901b428'.

remoto: generación de secuencia de commands de implementación.

remoto: ejecutando command de deployment …

remote: Manejo de la implementación de aplicaciones web .NET.

remoto: todos los packages listdos en packages.config ya están instalados.

remoto: todos los packages listdos en packages.config ya están instalados.

remoto: D: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1605,5): advertencia MSB3247: conflictos encontrados entre diferentes versiones del mismo ensamblado dependiente. [D: \ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj]

remoto: FSC: error FS3031: el proveedor de tipo 'D: \ home \ site \ repository \ packages \ FSharp.Azure.StorageTypeProvider.1.2.0 \ lib \ net40 \ FSharp.Azure.StorageTypeProvider.dll' notificó un error: atributo de ensamblaje 'TypeProviderAssemblyAttribute' hace reference a un ensamblado de diseñador 'FSharp.Azure.StorageTypeProvider' que no se puede cargar o no existe. No se pudo cargar el file o ensamblado 'FSharp.Core, Version = 4.3.1.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' o una de sus dependencies. El sistema no puede encontrar el file especificado. [D: \ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj]

remoto: FSC: advertencia FS3005: El ensamblado al que se hace reference 'D: \ home \ site \ repository \ packages \ FSharp.Azure.StorageTypeProvider.1.2.0 \ lib \ net40 \ FSharp.Azure.StorageTypeProvider.dll' tiene el atributo de nivel de ensamblado 'Microsoft. FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute 'pero no se encontraron classs de proveedor de tipo público [D: \ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj]

remoto: Falló exitCode = 1, command = "D: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe" "D: \ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj" / nologo / verbosity: m / t: Build / t: pipelinePreDeployCopyAllFilesToOneFolder / p: _PackageTempDir = "D: \ local \ Temp \ 3ec76803-496c-41df-ad73-f8bc79256ad9"; AutoParameterizationWebConfigConnectionStrings = false; Configuration = Release / p: SolutionDir = "D: \ home \ site \ repository. \ "

remoto: se ha producido un error durante la implementación del website.

remoto:

remoto: Error – Cambios comprometidos con el repository remoto pero la implementación en el website falló.

¿Alguna sugerencia?

Hablamos de esto en el chat aquí

Básicamente, este fue un problema en cómo MSBuild en el server detecta el comstackdor F # correcto para build el proyecto (3.0 vs 3.1)

Una MSBUILD_PATH = D:\Program Files (x86)\MSBuild\12.0\Bin\amd64\MSBuild.exe es especificar otra versión de MSBuild mediante la configuration de una aplicación en el sitio que se parece a esto MSBUILD_PATH = D:\Program Files (x86)\MSBuild\12.0\Bin\amd64\MSBuild.exe

Sin embargo, la corrección correcta debería ir en el file fsproj . En particular esta sección

 <!-- 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)" /> 

Debería actualizarse para

 <!-- 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)" /> 

Creo que este es un problema con las templates de WebSharper que no configuran la versión de Visual Studio correcta en el file de proyecto.

Sospecho que estás abordando un problema similar al que estaba implementando para implementar F # en Azure. El problema al que me estaba enfrentando es que el sistema de compilation no recogió las references F # correctamente. Tuve que agregar manualmente la reference a la ruta y mover manualmente las references .dll a la ruta de salida de la solución final.

http://indiedevspot.com/2015/02/18/deploying-f-web-job-to-azure/