完整错误如下:
类型 'System.Windows.Forms.Control'是 在不是的程序集中定义 引用。您必须添加引用 汇编'System.Windows.Forms, 版本= 2.0.0.0,文化=中立, 公钥= b77a5c561934e089' 。
它指向库项目的第一个类中的第一个语句(Debug.Assert行),它不需要System.Windows.Forms
(或者我认为)。我知道如何解决它:添加提到的参考。但是,我如何找出导致此错误的库,或者更好的是,使用WinForms库触发代码的哪一部分?
通常,您可以添加引用其他库的库,但只需在实际使用时添加对这些库的引用。
使用Microsoft的Framework Tools中的Binding Log Viewer Fuslogvw.exe也可以解决此问题或类似问题。它显示了应用程序绑定的程序集的所有尝试和成功。
答案 0 :(得分:30)
我怀疑你的代码没有引起这种情况,因为你说你没有使用System.Windows.Forms类型,编译器错误并没有指向代码的(有用)行。
我认为正在发生的是您引用的库具有公开可见的方法或属性,该方法或属性返回System.Windows.Forms.Control或将其作为参数。无论你是否真的最终调用那个方法/属性,它的公开可见意味着你自己的代码必须能够解析库正在使用的所有类型。如果库仅在内部使用System.Windows.Forms ,则不会遇到此问题。
这也意味着只是查看你所依赖的程序集的依赖关系可能只是缩小了嫌疑人列表的范围,因为可能有一些程序集在内部依赖System.Windows.Forms(没问题)和一个从SWForms程序集中具有类型的公共参数/返回值的故障排除程序集。
我的建议是你只是在没有引用S.W.Forms的情况下设置一个空项目,然后依次添加每个依赖项并尝试在每个项目之后进行编译。
答案 1 :(得分:3)
我遇到了同样的错误。
问题是我使用了对项目的引用,该项目使用了System.Windows.Forms。
解决方案是在项目中添加对System.Windows.Forms的引用。
答案 2 :(得分:2)
使用NDepend或Reflector或对象浏览器之类的东西来检查您所依赖的程序集的依赖关系。
鉴于上述信息,我想不出任何其他方式。