Невозможно скомпилировать проект из-за ошибок Fody. Ничего с Fody (или любым другим кодом) не изменилось
** Это проблема в Visual Studio 2013.
Ошибка, которую я получаю, огромна и в основном бесполезна, но суть ее
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'
Опять же, поскольку никаких изменений не было, я понятия не имею, в чем проблема в целом. Библиотека, которую она ищет, находится в том же месте, где она всегда была.
Редактировать: по-видимому, в этот момент он устал выплевывать эту ошибку, поэтому он сфабриковал новую
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()
Изменить 2:
Кроме того, ошибка предположительно происходит в "Fody.targets" в строке 50, которая
<Fody.WeavingTask
AssemblyPath="@(IntermediateAssembly)"
IntermediateDir="$(IntermediateDir)"
KeyFilePath="$(FodyKeyFilePath)"
ProjectDirectory="$(ProjectDir)"
SolutionDir="$(FodySolutionDir)"
References="@(ReferencePath)"
SignAssembly="$(FodySignAssembly)"
ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)"
DefineConstants="$(DefineConstants)"
/>
Изменить 3:
Я удалил все файлы, связанные с Fody, и Nuget перезагружал их во время процесса сборки. Ошибка после этого такая же, как и вторая ошибка:
"Error 42 The "Fody.WeavingTask" task failed unexpectedly."
Изменить 4:
Я действительно надеюсь, что разработчик Fody видит это, потому что мы находимся в абсолютной остановке, пока это не будет исправлено. Мы не можем "вернуться" назад, когда он работал, потому что текущая конфигурация ЕСТЬ, когда она работала.
6 ответов
Казалось бы, ваша ошибка на самом деле в поиске класса с именем 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");
Вы должны получить исключение, детализирующее отсутствующую библиотеку.
Если вы используете git, запустите это из командной строки:
git clean -xdf
Перепробовав все решения, которые я смог найти в интернете, у меня сработало следующее:
- Закройте Visual Studio.
- Удалить
Debug
а такжеRelease
папки в вашем проекте PCL и вашем проекте {платформы}. Для меня они были расположены в чем-то вродеMyPCLProjectName\bin\
а такжеiOS\bin\iPhoneSimulator\
, - Отредактируйте ваш PCL и {платформу}
.csproj
файл и удалить все<Import>
теги, кроме той, которая начинается<Import Project="$(MSBuildExtensionsPath32)\...
- Откройте Visual Studio.
- Восстановите пакеты (этот шаг может быть выполнен автоматически при повторном открытии Visual Studio) -
Solution Explorer > right-click solution > Restore NuGet Packages
,
Для устранения таких проблем вы можете использовать SysInternals Process Monitor.
Общий подход:
- запустить Process Monitor
- применить фильтр, чтобы контролировать только ваше приложение
- воспроизвести проблему
искать недостающие библиотеки DLL. Эта часть немного сложнее, так как
- DLL может быть не найдена несколько раз ("Путь не найден")
- но, наконец, найти ("Успех")
- это может быть не та DLL, которую вы ищете, а зависимость от этой DLL
Так что вам нужно найти DLL, которая никогда не была найдена. И вам не нужны библиотеки DLL, которые не были найдены, но затем найдены при следующей попытке.
Что ж, этот процесс может занимать довольно много времени, поэтому я разработал инструмент Process Monitor Log Analyzer. С его помощью вы сможете найти виновника за меньшее время.
- запустить Process Monitor
- применить фильтр только для мониторинга вашего приложения
- воспроизвести проблему
- сохранить результат в формате XML (все элементы, "Путь не найден" и "Успех")
- откройте XML в Log Analyzer
- сверху вниз проверьте наличие DLL. Инструмент будет показывать только те библиотеки DLL, которые никогда не были найдены.
Отказ от ответственности: я являюсь автором этого бесплатного инструмента, если это не стало ясно из текста.
Некоторые из вас, получающие подобные ошибки, могут извлечь выгоду из этой информации, которая гласит, что проекты с разными версиями Fody не могут использовать одну и ту же папку пакетов NuGet (если я правильно понял): Установка нескольких версий компиляции PropertyChanged breaks
Переустановка пакета Fody во всех проектах также решает проблему, но, возможно, будет проще изменить все на одну и ту же версию.
У меня был проект, который столкнулся с этим: моя машина
Visual Studio 2017
установлен, но недавно я также установил
Build Tools for Visual Studio 2019
а также для несвязанного проекта. Похоже, что-то запуталось в том, какие инструменты сборки использовать, поскольку удаление инструментов 2019 года решило эту проблему для меня.