【问题标题】:How to find MT2002 Offending DLL?如何找到 MT2002 违规 DLL?
【发布时间】:2018-10-16 17:01:20
【问题描述】:

在尝试使用 VSTS 构建我的 Xamarin.iOS 项目时,我不断收到此错误:

MTOUCH:错误 MT2002:无法解决 来自“系统”的“System.Configuration.ConfigurationException”参考, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089"

我理解这意味着某些 DLL 引用了不正确的东西。但是,当我通过模拟器进行调试时,它工作正常。当我加载一个类似的项目时,它工作正常(并通过 VSTS 构建)。有没有一种简单的方法来识别/查找有问题的文件/参考,以便我可以尝试修复它?

【问题讨论】:

  • 很多很多谷歌点击了这个问题,也有更好的记录。这个问题不太可能产生更好的规范 Q+A。
  • 我看到很多点击说有一个错误的参考 DLL。我没有看到任何人说如何找到错误的参考。

标签: c# xamarin xamarin.ios azure-pipelines


【解决方案1】:

在 IDE 中,您可以使用程序集浏览器查看解决方案中的哪个 .dll)) 引用了 System, Version=4.0.0.0,这不是 XI 提供的版本(也不是 PCL)。请注意,可能有多个程序集引用此程序集(和类型)。

您可以从命令行使用grep(至少在 macOS 上,我不记得 Windows 专用工具)来查找包含字符串 ConfigurationException 的 .dll。

旁注:

    1234563能够解析符号以重写任何代码)。
  • 不同的解决方案可能会起作用如果没有到达丢失符号的依赖项。在这种情况下,链接器只会删除代码(而不是解析它)。但是,如果ConfigurationException 是可访问的(通过静态分析),那么它需要存在,以便链接器重新编写程序集。 IOW 链接器可以接受 bad 程序集(或引用),只要最终应用程序代码不需要它。

【讨论】:

  • 谢谢!对我来说,它是 System.ComponentModel.DataAnnotations。我相信我改变了 PCL 的焦点,这导致了这个问题。删除对它的引用解决了问题。
【解决方案2】:

对于那些需要保持依赖关系的人,我更改了 iOS 构建属性中的链接器行为,我可以在浪费了几个小时后在我的设备上运行该应用程序。

【讨论】:

    【解决方案3】:

    在我的情况下,从 PCL 迁移到 NETStandart 2.0 后出现问题。我应该将 System.Net.Http.Formatting.Extension nuget 包添加到平台项目并且问题消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 2023-03-29
      • 2020-04-29
      • 1970-01-01
      • 2019-12-22
      相关资源
      最近更新 更多