2016-03-29 81 views
1

我有一個完善的項目,其中包含三個工作角色。這個項目一直使用F#,而不是在工作者角色本身,但在他們調用的函數中。我最近在項目中添加了另一個工作角色,但架構(調用F#代碼的C#工作角色)保持不變。由於這些變化部署後我已經得到這些信息:Azure工作者角色啓動期間的FSharp.Core版本錯誤

Could not load file or assembly 'FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. 

這種情況Autofac依賴解析期間:

Autofac.Core.DependencyResolutionException", "exceptionMessage": "An exception was thrown while invoking the constructor 'Void .ctor(Amazon.DynamoDBv2.AmazonDynamoDBConfig 

我知道這是一個衆所周知的問題,解決一般是添加一些綁定重定向。我添加了一個重定向這樣的:

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

...在有一個app.config解決每一個項目,其中包括所有的輔助角色。我還驗證了對FSharp.core的每個引用都使用4.3.1.0版本,並將本地複製設置爲true。

我也嘗試通過FSharp.Core nuget包向解決方案中的C#項目添加FSharp.core。

回答

3

我不知道爲什麼你會需要一個BR在這裏,因爲它聽起來像這總是工作,只是添加一個新的工作人員的角色已經不知所措了。

不知道您的部署過程,我會建議首先執行Cloud Service的手動包(您可以直接從Visual Studio或命令行中使用cspack執行此操作)。這將爲您提供一個zip文件,其中包含將部署到worker角色的所有代碼 - 確保包含FSharp.Core(以及正確的版本)。 。

我也建議做一個快速的差異(如果你不這樣做)什麼已經改變,因爲你在添加新的工作角色

最後 - 注意與FSharp.Core NuGet包 - Visual Studio對FSharp.Core的處理方式不同,如果項目中已經引用了FSharp.Core的版本,默認情況下不會引用Nuget版本。

+0

謝謝 - 那裏有幾個精彩的提示。一旦我跟蹤他們,我會盡快公佈結果。 – Kit

+0

打包雲服務,將cspkg文件重命名爲zip並解壓縮。將內部cssx文件重命名爲zip並解壓縮。 發現那裏同時存在FSharp.core.dll 4.3.1.0和4.4。意識到這是通過安裝FSharp.Core Nuget包完成的。恢復了上述變化,發現現在所有的FSharp.core.dlls都是4.3.1.0。 現在重新部署該版本來證明這個問題仍然存在(我認爲這將是因爲它是我Nugetted FSharp.core之前發生的事情)。 – Kit

+0

是的,再次失敗 - 仍然是「無法加載文件或程序集'FSharp.Core,Version = 4.3.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或它的某個依賴項,找到的程序集清單定義與程序集引用不匹配」。如果在構建過程中沒有更新(MyGet),我將吹掉整個分支構建並重新創建它。 – Kit