这是一个与 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/