如何找到MT2002违规DLL?

时间:2016-11-29 14:09:15

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

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

  

MTOUCH:错误MT2002:无法解决   " System.Configuration.ConfigurationException"参考来自"系统,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"

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

3 个答案:

答案 0 :(得分:3)

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

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

旁注:

  • 它在模拟器中工作的原因是使用了JIT(所以缺少的东西将在运行时抛出,而不是构建时间),默认情况下,托管链接器被禁用(并且它需要是能够解析符号以重写任何代码。)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

就我而言,从PCL迁移到NETStandart 2.0后出现问题。我应该将System.Net.Http.Formatting.Extension nuget包添加到平台项目中,问题不再存在。