22

完整的错误如下:

“System.Windows.Forms.Control”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Windows.Forms,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。

它指向不需要System.Windows.Forms(或者我认为)的库项目中第一个类中的第一个语句(一个 Debug.Assert 行)。我知道如何解决它:添加提到的参考。但是我如何找出导致此错误的库,或者更好的是,使用 WinForms 库触发的代码的哪一部分?

通常,您可以添加引用其他库的库,但您只需要在实际使用这些其他库时添加对它们的引用。


编辑:替代解决方案

也可以使用Microsoft 框架工具中的Binding Log Viewer Fuslogvw.exe解决此问题或类似问题。它显示了您的应用程序绑定到的程序集的所有尝试和成功。

4

3 回答 3

31

我怀疑没有导致此问题的代码行,因为您说您没有使用 System.Windows.Forms 类型,并且编译器错误未指向代码的(有用)行。

我认为正在发生的是您正在引用一个库,该库具有一个公开可见的方法或属性,该方法或属性要么返回 System.Windows.Forms.Control,要么将其作为参数。不管你是否真的最终调用了该方法/属性,它是公开可见的这一事实意味着你自己的代码必须能够解析库正在使用的所有类型。如果该库仅在内部使用 System.Windows.Forms ,您将不会遇到这种情况。

这也意味着仅查看您所依赖的程序集的依赖关系可能只会缩小嫌疑人的范围,因为可能有一些程序集在内部依赖于 System.Windows.Forms(没问题)和一个麻烦的程序集具有来自 SWForms 程序集的类型的公共参数/返回值。

我的建议是你只需建立一个没有 SWForms 引用的空项目,然后依次添加每个依赖项并尝试在每个依赖项之后进行编译。

于 2009-11-13T12:09:04.657 回答
3

我有同样的错误。

问题是我使用了对一个项目的引用,该项目在内部使用了 System.Windows.Forms。

解决方案是在您的项目中添加对 System.Windows.Forms 的引用。

于 2014-08-13T07:15:04.127 回答
2

使用 NDepend 或 Reflector 或对象浏览器之类的东西来检查您所依赖的程序集的依赖关系。

鉴于上述信息,我想不出任何其他方式。

于 2009-11-13T11:31:08.663 回答