c# - 使用 FSharp.Data 将 Web 应用程序部署到 Azure 网站

标签 c# asp.net-mvc f# azure-web-app-service

这是一个与 How do I deploy a web application using F# to Azure Web Site 类似的问题。我的 C#/F# MVC 项目使用 FSharp.Data NuGet 包,部署过程失败并显示消息

无法找到程序集“FSharp.Data,Version=1.1.4.0,Culture=neutral,PublicKeyToken=null”。

我能看到的唯一有效的解决方法是将所有 NuGet 引用(FSharp.Data、FSharp.Data.DesignTime、FSharp.Data.Experimental、FSharp.Data.Experimental.DesignTime)替换为对 DLL 的显式引用,并将“复制本地”设置为 true。我不愿意以这种方式把 NuGet 婴儿和洗澡水一起倒掉。有更聪明的方法吗?或者,是否有一个 Unresolved 问题可供我投票?

最佳答案

您可以添加<dependentAssembly>元素到您的web.config以确保FSharp.Data当您的项目部署到 Azure 时,程序集会包含在内。我之前在将混合 F#/C# ASP.NET MVC 项目部署到 Azure 时使用过这种技术;已经有一段时间了,但我认为我不必更改 Copy Local对引用的程序集进行设置(我通过 NuGet 添加)。

无论如何,您需要添加的条目应该如下所示:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Data" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

根据 Rob 的评论,他仍然收到相同的错误消息,以下是我诊断问题所要采取的后续步骤。

  • 构建 Azure 部署包(您不需要部署它)。构建完成后,找到部署包文件( *.cspkg );这实际上只是一个 zip 文件,因此将内容提取到一个文件夹中,例如 7-zip 。在提取的文件夹中,应该有一个带有 *.cssx 的文件。延伸范围比其他的要大得多;它也是一个 zip 文件,因此请将其解压到另一个文件夹中,然后使用 Windows 资源管理器浏览到该文件夹​​。从那里进入sitesroot文件夹,然后是 0文件夹。您现在应该查看网站的根目录(即将复制到网络服务器上 C:\inetpub\wwwroot 的文件/文件夹)。检查bin文件夹——你看到FSharp.Data了吗?那里集会?如果不是,这是构建/打包问题,而不是服务器问题;如果您确实看到 FSharp.Data组装,继续下一步。
  • 将您的项目部署到 Azure,然后将远程桌面部署到托管您的项目的实例之一。 (在实例上启用远程桌面有一个特殊的过程 - 如果您尚未执行此操作,则需要在继续之前执行此操作。)登录后,您可以打开事件查看器/em>(在管理工具下);查看Windows 日志下的应用程序日志 - 是否有任何 ASP.NET 错误?如果是这样,请单击它们并查看错误消息,它可能包含有关无法解析 FSharp.Data 的 .NET 异常消息。集会。如果是,请浏览至 C:\inetpub\wwwroot\并确保 FSharp.Data位于 bin网站的文件夹。如果是,请继续下一步。
  • 如果FSharp.Data如果程序集与您的 Web 项目一起正确打包和部署,那么当您的项目在 .NET 4.5 上运行时,它(或其依赖项之一)作为 .NET 4.0 程序集可能会出现一些问题。登录到 Azure 实例(通过远程桌面)时,您可以启用 Fusion 日志记录并使用 Fusion 日志查看器来跟踪 CLR 如何尝试加载程序集。如果您确实找到了该问题,解决该问题的可能方法是添加 <bindingRedirect> <dependentAssembly> 内的元素您在 web.config 中创建的条目。以下是我如何让原始 F# PowerPack(针对 .NET 2.0 版本的 FSharp.Core )在 .NET 4.0 上的 F#/C# 项目中工作:

    <dependentAssembly>
      <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    

关于c# - 使用 FSharp.Data 将 Web 应用程序部署到 Azure 网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221978/

相关文章:

c# - 如何使用 VS Code(Windows 平台)编译控制台应用程序?

c# - 如何打包 C# 9 源代码生成器并将其上传到 Nuget?

c# - 附加到进程 IIS 未命中断点

ASP.NET MVC 2 LINQ-to-SQL 生成的类和模型验证

c# - 使用 BindAttribute 附加到子类 MVC3 模型中的白名单

.net - 当从非 F# 应用程序使用 F# 制作的 DLL 引用 Fsharp.Core v4.4.1.0 时找不到文件

c# - 将c#中的简单加密方法转换为php

c# - 获取非通用任务的结果

f# - 如何在 Fsharp 中返回 "None"?

arrays - 为什么在 F# 中处理数组比列表更快