【问题标题】:Unable to compile project due to Fody errors. Nothing with Fody (or any other code) has been changed由于 Fody 错误,无法编译项目。 Fody(或任何其他代码)的任何内容均未更改
【发布时间】:2015-12-29 21:07:32
【问题描述】:

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

此外,据称该错误发生在第 50 行的“Fody.targets”内,即

<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 的开发人员能看到这一点,因为在解决此问题之前,我们处于绝对停滞状态。我们不能“恢复”到它工作的时候,因为当前的配置是它工作的时候。

【问题讨论】:

  • 能否查看Mono.Cecil.dll的版本,在资源管理器中右键单击,查看属性,可以找到版本号。检查它是 0.9.6.0,如果不是,您可能需要重定向。
  • 它指向正确的版本。 0.9.6.0.
  • 如果我在解决方案中的一个项目引用了旧版本的 Fody 而另一个项目引用了依赖于不同版本的新 Fody,我发现我遇到了您上面提到的“Mono.Cecil”问题莫诺塞西尔。我通过将所有使用 Fody 的项目从 nuget 更新到最新版本来解决这个问题,并且我的构建问题也得到了解决。
  • +1 指出 Fody 错误消息不包含任何有用信息。我有一个继承项目会引发 Fody 编译器错误。根本没有迹象表明哪个文件有问题。
  • 在此处提出问题并确保您遵循模板中的所有步骤github.com/Fody/Fody/issues/…

标签: c# fody fody-propertychanged


【解决方案1】:

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

您应该得到一个详细说明丢失库的异常。

【讨论】:

  • 不幸的是,我现在已经尝试了所有这些,当在 LinqPad 中加载程序集时,我根本没有得到任何输出(所以我假设 LinqPad 至少正确加载了程序集)。请注意,现在错误已更改为无法找到“FodyIsolated”
  • 如果没有更多的上下文,这会很棘手。如果从同一目录在 linqpad 中正确加载mono.cecil,则您的错误似乎确实是在加载mono.cecil,那么问题可能更深。如果您使用的是版本控制,我会尝试检查到一个干净的目录并重试。某处存在装配不匹配。我们都去过那里,我很想知道决议是什么。如果我能想到其他尝试,我会尝试提供更多建议。
  • 不幸的是,尝试以前的构建并没有帮助。稍后我可能会从一个干净的目录中尝试它。就像你说的,在我的 Windows 安装/VS 安装中,有些东西真的不同步或不匹配。我目前正在“修复”我的 VS 安装,并且可能会尝试将 Windows 恢复到一两天前,看看这是否会使程序集恢复到应有的状态。我一定会发布解决方案。感谢您在此期间提供的帮助。
【解决方案2】:

如果您使用的是 git,请从命令行运行:

git clean -xdf

【讨论】:

  • 在此之后,我做了一个“清洁解决方案”和“重建解决方案”,然后我的项目就可以编译和运行了。
  • 我在一个大型 repo 上工作,其中包含数十个解决方案,这些解决方案似乎有多个版本 Mono.Cecil,看起来构建过程会选择它找到的第一个 Mono.Cecil,运行此命令然后打开并仅构建解决问题所需的解决方案。
【解决方案3】:

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

  1. 关闭 Visual Studio。
  2. 删除 PCL 项目和 {platform} 项目中的 DebugRelease 文件夹。对我来说,它们位于 MyPCLProjectName\bin\iOS\bin\iPhoneSimulator\ 之类的地方。
  3. 编辑您的 PCL 和 {platform} .csproj 文件并删除所有 &lt;Import&gt; 标签,除了&lt;Import Project="$(MSBuildExtensionsPath32)\... 开头的标签
  4. 重新打开 Visual Studio。
  5. 恢复包(此步骤可能在您重新打开 Visual Studio 时自动完成)-Solution Explorer &gt; right-click solution &gt; Restore NuGet Packages

【讨论】:

    【解决方案4】:

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

    一般做法是:

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

      1. 可能多次找不到 DLL(“找不到路径”)
      2. 但最终被找到(“成功”)
      3. 它可能不是您要查找的 DLL,而是该 DLL 的依赖项

      所以您需要找到一个从未找到的 DLL。并且您不希望找到未找到但随后在后续尝试中找到的 DLL。

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

    1. 运行进程监视器
    2. 应用过滤器仅监控您的应用程序
    3. 重现问题
    4. 将结果保存为 XML(保留所有项目,“找不到路径”和“成功”)
    5. 在日志分析器中打开 XML
    6. 从上到下,检查是否存在 DLL。该工具只会显示从未找到的 DLL。

    免责声明:我是该免费工具的作者,如果文本中没有明确说明的话。

    【讨论】:

    • 感谢您的回复。通过监视我的应用程序,我只是有点困惑您的确切含义。你指的是我的编译器吗? (对比 2013 年)。由于 Fody,我根本无法编译我的应用程序。
    • @贾斯汀。是的,如果是VS2013找不到DLL,监控VS2013(devenv.exe)。但是,VS 2013 可能会使用单独的 exe 作为编译器,然后对其进行监控。如果您不知道,只需监视所有内容并稍后过滤。
    • 好吧,我明天要试一试,因为我马上就要下班了。再次感谢。
    • 我很清楚,一旦我将 XML 导入到您的工具中,我会得到一大堆不同的东西。其中一些肯定是指 DLL,但许多指的是 exe、'.cdf-ms' 等。但我正在寻找说“找不到路径”的东西,对吗?有一些引用 DLL 的东西也会说“找不到名称”。
    • “未找到名称”也是可能的。该工具仅列出缺少 DLL 的潜在候选对象。但是,有时应用程序可能会正常降级,实际上可能不需要 DLL。
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-30
        相关资源
        最近更新 更多