由于Fody错误,无法编译项目.Fody(或任何其他代码)没有任何更改
本文关键字:Fody 代码 其他 任何更 任何 错误 编译 由于 项目 | 更新日期: 2023-09-27 18:15:28
**这是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'
再一次,因为没有变化,我不知道问题是什么。它正在查找的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()
编辑2:而且,错误据称发生在"Fody"内部。在第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的开发人员看到这一点,因为我们处于绝对停滞状态,直到这个问题得到解决。我们不能"恢复"到它工作的时候,因为当前的配置是当它工作的时候。
似乎你的错误实际上是在寻找一个类称为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
在尝试了所有我能在网上找到的解决方案后,以下方法对我有效:
- Close Visual Studio.
- 删除PCL项目和{platform}项目中的
Debug
和Release
文件夹。对我来说,这些位于MyPCLProjectName'bin'
和iOS'bin'iPhoneSimulator'
。 - 编辑PCL和{platform}
.csproj
文件并删除所有<Import>
标签,除了开头的<Import Project="$(MSBuildExtensionsPath32)'...
- 重新打开Visual Studio.
- 恢复包(此步骤可能会在您重新打开Visual Studio时自动完成)-
Solution Explorer > right-click solution > Restore NuGet Packages
。
要调试这些问题,您可以使用SysInternals Process Monitor。
一般的方法是:
- 运行进程监控
- 应用一个过滤器只监视你的应用
- 重现问题
-
查找丢失的dll。这部分有点棘手,因为
- 一个DLL可能找不到几次("Path not found")
- 但最终被找到("Success")
- 可能不是你要查找的DLL,而是该DLL的依赖项
所以你需要找到一个从来没有找到的DLL。你也不希望dll没有被找到,但在随后的尝试中被找到。
嗯,这个过程可能相当耗时,所以我开发了process Monitor Log Analyzer工具。有了它,你应该能在更短的时间内找到罪魁祸首。
- 运行进程监控
- 应用过滤器只监视您的应用程序
- 重现问题
- 将结果保存为XML(保留所有项目,"Path not found"answers"Success")
- 在Log Analyzer 中打开XML
- 从上到下,检查dll是否存在。该工具将只显示从未找到的dll。
免责声明:我是这个免费工具的作者,如果从文本中没有清楚说明的话。
你们中的一些人得到类似的错误可能会受益于这个信息,它指出具有不同Fody版本的项目不能使用相同的NuGet包文件夹(如果我理解正确的话):安装多个版本的PropertyChanged会破坏编译
在所有项目中重新安装Fody包也可以解决这个问题,但是将所有项目更改为相同的版本可能更容易。
我有一个项目遇到了这个问题:我的机器安装了Visual Studio 2017
,但是我最近也为一个不相关的项目安装了Build Tools for Visual Studio 2019
。看起来有些东西变得困惑了,因为卸载2019年的构建工具为我解决了这个问题。