2016-03-29 53 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