2015-10-01 7 views
6

** Это проблема в Visual Studio 2013.Невозможно скомпилировать проект из-за ошибок Fody. Ничего с Fody (или любой другой код) не был изменен

Ошибка я получаю массивен и в основном бесполезно, но суть этого является

Error 130 Fody: Could not load 'ModuleWeaver' from 'PropertyChanged.Fody, Version=1.50.3.0, Culture=neutral, PublicKeyToken=null' due to ReflectionTypeLoadException. 
It is possible you need to update the package. 
exception.LoaderExceptions: 
System.IO.FileLoadException: Could not load file or assembly 'Mono.Cecil,  Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its  dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
File name: 'Mono.Cecil, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' 

С тех пор, как не было никаких изменений, я понятия не имею, в чем проблема. DLL, которую он ищет, сидит в том же месте, где он всегда сидел.

Редактировать: видимо, в этот момент он надоел выплевывая эту ошибку, так что изготовил новый

Error 42 The "Fody.WeavingTask" task failed unexpectedly. 
System.IO.FileNotFoundException: Could not load file or assembly 'Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its dependencies. The system cannot find the file specified. 
File name: 'Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' 
    at ExceptionExtensions.LogException(ILogger logger, Exception exception) 
    at Processor.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\Fody\Processor.cs:line 56 
    at Fody.WeavingTask.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\Fody\WeavingTask.cs:line 44 
    at  Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext() 

Edit 2:

Кроме того, ошибка якобы происходит внутри «Fody. цели»на линии 50, которая является

<Fody.WeavingTask 
     AssemblyPath="@(IntermediateAssembly)" 
     IntermediateDir="$(IntermediateDir)" 
     KeyFilePath="$(FodyKeyFilePath)" 
     ProjectDirectory="$(ProjectDir)" 
     SolutionDir="$(FodySolutionDir)" 
     References="@(ReferencePath)" 
     SignAssembly="$(FodySignAssembly)" 
     ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)" 
     DefineConstants="$(DefineConstants)" 
    /> 

Edit 3:

I удаленные все файлы, связанные с Fody и Nuget, перезагрузили их во время процесса сборки. Ошибка после этого такая же, как 2-ой ошибки:

"Error 42 The "Fody.WeavingTask" task failed unexpectedly." 

Редактировать 4:

Я действительно надеюсь, DEV из Fody видит это, потому что мы в абсолютном состоянии покоя, пока это не будет устранена. Мы не можем «вернуться» обратно, когда он работает, потому что текущая конфигурация IS, когда она работает.

+0

могли бы вы проверить версию Mono.Cecil.dll, щелкните правой кнопкой мыши в Проводнике, и пройти через свойства, вы будете найдите номер версии. Проверьте, что это 0.9.6.0, если нет, вам может понадобиться перенаправление. – Jim

+0

Указывает на правильную версию. 0.9.6.0. – Justin

+0

Я нашел, что у меня проблема «Mono.Cecil», о которой вы говорили выше, если один из моих проектов в решении ссылался на более старую версию Fody, а другой проект ссылался на более новую версию Fody, которая зависела от другой версии Mono.Cecil. Я прояснил это, обновив все проекты, которые используют Fody до последней версии от nuget, и мои проблемы с сборкой выясняются. –

ответ

1

Чтобы отладить такие проблемы, вы можете использовать SysInternals Process Monitor.

Общий подход:

  1. запустить Process Monitor
  2. применить фильтр, чтобы контролировать ваше приложение только
  3. воспроизвести проблему
  4. взгляд отсутствующих библиотек DLL. Эта часть немного сложнее, так как

    1. DLL не может быть найдено несколько раз («Путь не найден»)
    2. , но в конце концов можно найти («Успех»)
    3. это не может быть DLL вы ищете, но зависимость от этой библиотеки

    Так что вам нужно найти DLL, который не был никогда найдено. И вы не хотите, чтобы DLL-файлы не были найдены, но затем были найдены в последующей попытке.

Ну, этот процесс может быть довольно много времени, поэтому я разработал инструмент Process Monitor Log Analyzer. С его помощью вы сможете найти виновника за меньшее время.

  1. запустить Process Monitor
  2. применить фильтр для контроля приложения только
  3. воспроизвести проблему
  4. сохранить результат в виде XML (сохранить все элементы, «Путь не найден» и «Успех»)
  5. откройте XML в Log Analyzer
  6. сверху вниз, проверьте наличие DLL. Инструмент будет показывать только DLL, которые никогда не будут найдены.

Отказ от ответственности: Я являюсь автором этого бесплатного инструмента, если это не стало ясно из текста.

+0

Спасибо за ответ. Я просто немного смущен, что вы подразумеваете под контролем моего приложения. Вы имеете в виду мой компилятор? (VS 2013). Я больше не могу скомпилировать свое приложение из-за Fody. – Justin

+0

@ Justin. Да, если VS2013 не может найти DLL, проверьте VS2013 (devenv.exe). Однако VS 2013 может использовать отдельный exe в качестве компилятора, а затем контролировать его. Если вы не знаете, просто следите за всем и фильтруйте позже. –

+0

Хорошо, я должен буду отдать этот снимок завтра, когда я уйду с работы в ближайшее время. Еще раз спасибо. – Justin

11

Казалось бы, ваша ошибка заключается в нахождении класса под названием ModuleWeaver. Этот класс является частью пакета Fody.

Просто обновление пакета в nuget менеджера пакетов с:

update-package Fody -reinstall 

будет, вероятно, это исправить.

Несоблюдение этого: убедитесь, что ваш файл app.config не имеет неправильных переадресаций. Удалить этот раздел, удалить все переадресации. Visual Studio, как правило, добавляет необходимые обратно.

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /> 
     </dependentAssembly> 

Повторите попытку, если это не удастся, попробуйте найти, какая зависимая сборка не работает. Вы можете написать однострочное приложение командной строки или использовать LinqPad.

Вы можете попробовать LinqPad, если вы его не используете, вставьте это.

Assembly.LoadFile("path to Fody"); 
Assembly.LoadFile("path to Mono.Cecil"); 

Вы должны получить исключение, описывающее недостающую библиотеку.

+0

Я, к сожалению, сейчас пробовал все это, и при загрузке сборки в LinqPad я вообще не получаю вывода (поэтому я предполагаю, что LinqPad по крайней мере загружает сборки правильно). Имейте в виду, теперь ошибка изменилась на невозможность найти «FodyIsolated» – Justin

+0

Без лишнего контекста это будет сложно. Кажется, что ваша ошибка при загрузке mono.cecil, если она правильно загружается в linqpad из того же каталога, то проблема, возможно, глубже. Если вы используете контроль версий, я бы попробовал проверить чистый каталог и повторить попытку. Там где-то есть несоответствие сборки. Мы все были там, я буду очень рад узнать, что такое резолюция. Я попробую дать еще несколько советов, если я смогу придумать что-то еще, чтобы попробовать. – Jim

+0

К сожалению, попытки предыдущих сборщиков не помогли. Я могу попробовать его из чистого каталога позже. Как вы говорите, что-то действительно не синхронизировано или несовместимо с установкой Windows/VS. Я сейчас «исправляю» мою установку VS и могу попытаться восстановить Windows на день или два назад, чтобы убедиться, что эти сборки вернутся так, как они должны быть. Я обязательно опубликую, что это за решение. Спасибо за вашу помощь. – Justin

1

Некоторые из вас получают подобные ошибки могут извлечь пользу из этой информации, в котором говорится, что проекты с различными Fody версий не могут использовать ту же папку пакеты NuGet (если я правильно понял): Installing multiple versions of PropertyChanged breaks compilation

Переустановка пакет Fody во всех проектах также решает проблему, но изменить все на одну и ту же версию может быть проще.

1

После попытки всех решений я мог бы найти в Интернете, следующий работал для меня:

  1. Закрыть Visual Studio.
  2. Удалите папки Debug и Release в проекте PCL и в проекте {platform}. Для меня они были расположены примерно в MyPCLProjectName\bin\ и iOS\bin\iPhoneSimulator\.
  3. Корректировать PCL и {платформа} .csproj файл и удалить все <Import> теги, за исключением для одного, который начинается <Import Project="$(MSBuildExtensionsPath32)\...
  4. Reopen Visual Studio.
  5. Восстановить пакеты (этот шаг может быть выполнен автоматически при повторном открытии Visual Studio) - Solution Explorer > right-click solution > Restore NuGet Packages.
1

Если вы используете Git, работает из командной строки:

git clean -xdf