2013-06-20 135 views
2

這與How do I deploy a web application using F# to Azure Web Site類似。我的C#/ F#MVC項目使用FSharp.Data NuGet包,並且部署過程失敗,並顯示消息使用FSharp.Data將Web應用程序部署到Azure網站

無法找到程序集「FSharp.Data,Version = 1.1.4.0,Culture = neutral,PublicKeyToken = null」 。

我能看到的唯一有效的解決方法是將所有的Nu​​Get引用(FSharp.Data,FSharp.Data.DesignTime,FSharp.Data.Experimental,FSharp.Data.Experimental.DesignTime)替換爲顯式引用的DLL ,並將複製本地設置爲true。我不願意以這種方式將NuGet嬰兒帶出洗澡水。有沒有更聰明的方法?另外,是否有一個公開的問題,我可以添加我的投票?

+1

是否這篇博客的幫助? http://sireel-world.azurewebsites.net/sir-eel-visions/WATK-FS-Pt2。 F#項目模板有幾個問題會使git部署變得有點棘手。如果你仍然有問題,如果你可以在這裏創建一個問題 - https://github.com/projectkudu/kudu/issues/new,並且可能推送一個GitHub失敗的樣本庫,那將是非常棒的。 – Pranav

+0

感謝Pranav。我會很快上傳我的項目的精選內容。你可能不會想要瀏覽項目中所有無聊的細節。 –

回答

2

您可以將<dependentAssembly>元素添加到您的web.config以確保將項目部署到Azure時包含FSharp.Data程序集。在將混合F#/ C#ASP.NET MVC項目部署到Azure之前,我已經使用過這種技術;這是一段時間,但我不認爲我必須改變引用程序集(我通過NuGet添加)的Copy Local設置。

無論如何,你需要添加應該是這個樣子的條目:

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

基於羅布的評論,他仍然得到同樣的錯誤消息,我這裏還有我會採取下一步行動來診斷問題。

  • 構建Azure部署包(不需要部署它)。完成構建後,找到部署包文件(*.cspkg);這實際上只是一個zip文件,因此將內容提取到一個文件夾中,例如7-zip。在提取的文件夾中,應該有一個文件,其中*.cssx擴展名比其他文件大得多;它也是一個zip文件,因此將其提取到另一個文件夾中,然後使用Windows資源管理器瀏覽該文件夾。從那裏進入sitesroot文件夾,然後進入0文件夾。您現在應該查看網站的根目錄(即將在Web服務器上覆制到C:\inetpub\wwwroot的文件/文件夾)。檢查bin文件夾 - 你看到FSharp.Data程序集嗎?如果不是,這是一個構建/包裝問題,而不是服務器問題;如果看到FSharp.Data部件,請繼續下一步。
  • 將您的項目部署到Azure,然後將遠程桌面部署到您的項目託管的實例之一。 (在實例上啓用遠程桌面有一個特殊的過程 - 如果尚未完成此操作,則需要在繼續之前完成此操作。)登錄後,您可以打開事件查看器(在管理工具);看看應用程序日誌在Windows日誌 - 那裏有任何ASP.NET錯誤?如果是這樣,請單擊它們並查看錯誤消息,它可能包含有關無法解析FSharp.Data程序集的.NET異常消息。如果是,請瀏覽至C:\inetpub\wwwroot\並確保FSharp.Data位於網站的bin文件夾中。如果是,請繼續下一步。
  • 如果FSharp.Data程序集與您的Web項目一起打包和部署正確,那麼當您的項目運行在.NET上時,可能會出現與.NET 4.0程序集(或其中一個依賴項)相關的問題。 4.5。在登錄到Azure實例(通過遠程桌面)時,您可以啓用Fusion日誌記錄並使用Fusion日誌查看器來跟蹤CLR如何嘗試加載程序集。如果你確實追蹤了這個問題,解決問題的可能方法是在web.config中創建的<dependentAssembly>條目中添加<bindingRedirect>元素。以下是我這樣做是爲了獲得原始的F#PowerPack中(其中有針對性的FSharp.Core的.NET 2.0版本)在我的F#/ C#項目工作的.NET 4.0:

    <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> 
    
+0

謝謝傑克。我走了,但沒有快樂。我不知道是否因爲FSharp.Data庫是一個.NET 4.0程序集,而我的MVC項目是一個.NET 4.5程序集。 –

+0

@RobLyndon在將條目添加到您的'web.config'之後,您是否收到了不同的錯誤消息?另外,您是否將F#項目的目標框架版本設置爲.NET 4.5?在Pranav的評論中鏈接的博客文章說,C#/ F#MVC項目模板有一個錯誤,其中C#項目將被設置爲以.NET 4.5爲目標,而F#項目只會被設置爲.NET 4.0(所以它需要手動更改)。 –

+0

不幸的是,這是相同的錯誤信息。由於我在稍後階段添加了我的F#類庫,因此不使用標準模板,並且所有內容都設置爲4.5。 –

相關問題