由于Fody错误,无法编译项目。 Fody(或任何其他代码)没有任何改变

时间:2015-10-01 17:55:59

标签: c# fody fody-propertychanged

**这是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:

此外,该错误据称发生在&#34; Fody.targets&#34;在第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的开发人员看到这一点,因为我们会在这个问题得到解决之前一直处于绝对停滞状态。我们无法恢复&#34;回到工作时,因为当前的配置是工作时的。

6 个答案:

答案 0 :(得分:14)

看起来您的错误实际上是在找到一个名为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");

您应该获得详细说明缺失库的异常。

答案 1 :(得分:2)

在尝试了我可以在互联网上找到的所有解决方案之后,以下内容对我有用:

  1. 关闭Visual Studio。
  2. 删除PCL项目和{platform}项目中的DebugRelease文件夹。对我而言,它们位于MyPCLProjectName\bin\iOS\bin\iPhoneSimulator\
  3. 之类的位置
  4. 修改您的PCL和{platform} .csproj文件并删除所有<Import>标记,之外的<Import Project="$(MSBuildExtensionsPath32)\...
  5. 重新打开Visual Studio。
  6. 恢复软件包(重新打开Visual Studio时可以自动完成此步骤) - Solution Explorer > right-click solution > Restore NuGet Packages

答案 2 :(得分:1)

要调试此类问题,您可以使用SysInternals Process Monitor

一般方法是:

  1. 运行Process Monitor
  2. 应用过滤器仅监控您的应用程序
  3. 重现问题
  4. 寻找丢失的DLL。这部分有点棘手,因为

    1. 可能多次找不到DLL(&#34;找不到路径&#34;)
    2. 但最终被发现(&#34;成功&#34;)
    3. 它可能不是您正在寻找的DLL,而是该DLL的依赖
    4. 所以你需要找到一个从不找到的DLL。并且您不希望在以后的尝试中找到但未找到的DLL。

      嗯,这个过程可能非常耗时,所以我开发了工具Process Monitor Log Analyzer。有了它,你应该能够在更短的时间内找到罪魁祸首。

      1. 运行Process Monitor
      2. 仅应用过滤器来监控您的应用程序
      3. 重现问题
      4. 将结果保存为XML(保留所有项目,&#34;找不到路径&#34;以及&#34;成功&#34;)
      5. 在Log Analyzer中打开XML
      6. 从上到下,检查DLL的存在。该工具仅显示从未找到的DLL。
      7. 免责声明:我是该免费工具的作者,如果从文本中看不清楚的话。

答案 3 :(得分:1)

有些人得到类似的错误可能会从这些信息中受益,该信息指出具有不同Fody版本的项目不能使用相同的NuGet包文件夹(如果我理解正确的话): Installing multiple versions of PropertyChanged breaks compilation

在所有项目中重新安装Fody软件包也可以解决问题,但将所有版本更改为相同版本可能会更容易。

答案 4 :(得分:1)

如果您正在使用git,请从命令行运行:

git clean -xdf

答案 5 :(得分:0)

我有一个项目遇到了这个问题:我的机器安装了 Visual Studio 2017,但我最近还为一个不相关的项目安装了 Build Tools for Visual Studio 2019。由于卸载 2019 版的工具为我解决了这个问题,因此似乎对使用哪些构建工具感到困惑。