2016-03-29 4 views
1

У меня есть хорошо зарекомендовавший себя проект, который включает в себя три роли работников. Этот проект всегда использовал F #, а не в самих рабочих ролях, а в функциях, которые они называют. Недавно я добавил в проект еще одну рабочую роль, но архитектура (рабочие роли C#, вызывающие код F #) остается неизменной. Так как эти изменения я получаю эти сообщения после развертывания:Ошибки FSharp.Core при запуске роли рабочего Azure

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 к проектам C# в решении через пакет phharp.Core nuget.

ответ

3

Я не уверен, зачем вам нужен BR здесь, поскольку это звучит так, как будто это всегда работало, и просто добавление новой рабочей роли каким-то образом повредило ситуацию.

Не зная своего процесса развертывания, я бы предложил сначала выполнить ручной пакет облачной службы (вы можете сделать это непосредственно из Visual Studio или в командной строке, используя cspack). Это даст вам zip-файл, содержащий весь код, который будет развернут в рабочей роли - убедитесь, что это содержит FSharp.Core (и правильную версию). .

Я хотел бы также предложить делать быстрый диф (если вы еще не сделали этого) с тем, что изменилось с тех пор как вы добавили новую роль работника в

Наконец - смотреть с пакетом FSharp.Core NuGet - FSharp.Core обрабатывается по-разному с помощью Visual Studio и по умолчанию не будет ссылаться на версию Nuget, если в проекте уже есть версия FSharp.Core.

+0

Спасибо - несколько блестящих советов. Я опубликую результаты, как только я их последую. – Kit

+0

Упакованный облачный сервис, переименованный в файл cspkg для zip и распаковки. Переименовал внутренние файлы cssx в ZIP и распакован. Обнаружил, что там были и FSharp.core.dll 4.3.1.0 и 4.4. Понял, что это было сделано путем установки пакета FSharp.Core Nuget. Отменив это изменение, повторив вышеизложенное, выяснилось, что теперь все файлы FSharp.core.dll равны 4.3.1.0. Теперь передислоцировать эту версию, чтобы доказать эту проблему, все еще существует (я думаю, что это будет так, как это было до того, как я обзавелся FSharp.core). – Kit

+0

Да, снова не удалось - все еще «Не удалось загрузить файл или сборку» FSharp.Core, Version = 4.3.1.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a »или одна из его зависимостей. Определение манифеста расположенной сборки не соответствует ссылке на сборку ». Я собираюсь сдуть всю ветку сборки и воссоздать ее, если что-то не обновляется во время сборки (MyGet). – Kit

Смежные вопросы