首页 文章

部署F#Azure存储类型提供程序以部署到Azure Web应用程序

提问于
浏览
1

我正在尝试在我的F#项目中使用Azure存储类型提供程序:

Install-Package FSharp.Azure.StorageTypeProvider

它在本地工作,但是当我从我的本地Git存储库部署到我的Azure Web应用程序时,我收到以下错误

remote:更新分支'master' . remote:更新子模块 . remote:为commit id'f67901b428'准备部署 . remote:生成部署脚本 . remote:运行部署命令... remote:处理.NET Web应用程序部署 . remote:已安装packages.config中列出的所有软件包 . remote:已安装packages.config中列出的所有软件包 . remote:D:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1605,5):警告MSB3247:发现同一依赖程序集的不同版本之间存在冲突 . [D:\ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj] remote:FSC:error FS3031:类型提供程序'D:\ home \ site \ repository \ packages \ 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:\ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj] remote:FSC:警告FS3005:引用程序集'D:\ home \ site \ repository \ packages \ FSharp.Azure.StorageTypeProvider.1.2.0 \ lib \ net40 \ FSharp.Azure.StorageTypeProvider.dll'具有程序集级别属性'Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute',但未找到公共类型提供程序类[D:\ home \ site \ repository \ FlunSharp \ FlunSharp.fsproj] remote: 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 . \“remote:网站部署期间发生错误 . remote:remote:错误 - 提交到远程存储库的更改但部署到网站失败 .

有什么建议?

2 回答

  • 0

    我们在_1536158中讨论过这个问题

    基本上这是服务器上的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

    我怀疑你遇到类似的问题,我正在将F#部署到Azure . 我遇到的问题是构建系统没有正确地获取F#引用 . 我不得不手动添加对路径的引用,并手动将.dll引用移动到最终解决方案的输出路径中 .

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

相关问题