这是与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”。
我能看到的唯一有效的解决方法是使用对DLL的显式引用替换所有NuGet引用(FSharp.Data,FSharp.Data.DesignTime,FSharp.Data.Experimental,FSharp.Data.Experimental.DesignTime),和复制本地设置为true。我不愿以这种方式把NuGet宝宝带出洗澡水。有更聪明的方式吗?或者,是否存在一个我可以加入投票的公开问题?
答案 0 :(得分:2)
您可以向web.config
添加<dependentAssembly>元素,以确保在将项目部署到Azure时包含FSharp.Data
程序集。在将混合的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的评论,他仍然收到相同的错误消息,这是我将采取的后续步骤来诊断问题。
*.cspkg
);这实际上只是一个zip文件,因此将内容提取到一个文件夹中,例如7-zip。在解压缩的文件夹中,应该有一个*.cssx
扩展名的文件比其他文件大得多;它也是一个zip文件,因此将其解压缩到另一个文件夹,然后使用Windows资源管理器浏览到该文件夹。从那里,进入sitesroot
文件夹,然后进入0
文件夹。您现在应该查看网站的根目录(即,将在Web服务器上复制到C:\inetpub\wwwroot
的文件/文件夹)。检查bin
文件夹 - 您在那里看到FSharp.Data
程序集吗?如果没有,这是一个构建/打包问题,而不是服务器问题;如果您确实看到FSharp.Data
程序集,请继续执行下一步。FSharp.Data
程序集的.NET异常消息。如果是,请浏览到C:\inetpub\wwwroot\
并确保FSharp.Data
位于网站的bin
文件夹中。如果是,请继续执行下一步。如果FSharp.Data
程序集与您的Web项目一起正确打包和部署,那么当您的(或其中一个依赖项)作为.NET 4.0程序集时,可能会出现一些问题。项目正在.NET 4.5上运行。登录Azure实例(通过远程桌面)后,您可以启用Fusion日志记录并使用Fusion日志查看器来跟踪CLR如何尝试加载程序集。如果您确实追踪问题,可能的解决方法是在您<bindingRedirect>
中创建的<dependentAssembly>
条目中添加web.config
元素。以下是我在.NET 4.0上的F#/ C#项目中使用原始F#PowerPack(针对.NET 2.0版本的FSharp.Core
)的方法:
<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>