Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试错误“;类型';xx和x27;在未引用的程序集中定义;_C#_Visual Studio 2008_Debugging_Assembly Resolution - Fatal编程技术网

C# 调试错误“;类型';xx和x27;在未引用的程序集中定义;

C# 调试错误“;类型';xx和x27;在未引用的程序集中定义;,c#,visual-studio-2008,debugging,assembly-resolution,C#,Visual Studio 2008,Debugging,Assembly Resolution,完全错误如下所示: 类型 “System.Windows.Forms.Control”是 在未定义的程序集中定义 参考。您必须添加一个引用 到程序集System.Windows.Forms, 版本=2.0.0.0,区域性=中性, PublicKeyToken=b77a5c561934e089' 它指向库项目中第一个类中的第一条语句(Debug.Assert行),它不需要System.Windows.Forms(或者我认为是这样)。我知道如何解决它:添加提到的参考。但是,我如何找出是哪个库导致了这

完全错误如下所示:

类型 “System.Windows.Forms.Control”是 在未定义的程序集中定义 参考。您必须添加一个引用 到程序集System.Windows.Forms, 版本=2.0.0.0,区域性=中性, PublicKeyToken=b77a5c561934e089'

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

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


编辑:替代解决方案
此问题或类似问题也可以使用Microsoft的框架工具解决。它显示应用程序绑定到的程序集的所有尝试和成功。

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


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

我怀疑没有任何代码行导致这种情况,因为您说您没有使用System.Windows.Forms类型,并且编译器错误没有指向代码的(有用)行

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

这还意味着只查看所依赖的程序集的依赖关系可能只会缩小可疑列表的范围,因为可能有一些程序集在内部依赖System.Windows.Forms(没问题)以及具有来自S.W.Forms程序集的类型的公共参数/返回值的一个麻烦程序集

我的建议是,您只需设置一个不引用S.W.Forms的空项目,然后依次添加每个依赖项,并尝试在每个依赖项之后进行编译。

我也遇到了同样的错误

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


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

这也是我目前想到的方法,但它要么太粗糙(NDepent),要么太粗糙(Reflector)。我还可以回滚代码更改,直到错误出现的那一刻,这将显示导致错误的行。我希望有别的东西。这证明是正确的:有一个被引用的库,它有一个泛型方法,该方法被限制为
控制
,但没有以任何方式使用。我知道可能的原因,我只是希望找到一条“直截了当”的道路来找到罪犯。这一次我使用了简单的推断(回滚直到问题出现),我不确定是否有一种简单的方法来识别罪魁祸首,除了你的建议(回滚)或我的建议(设置一个测试用例项目,并一次添加一个依赖项,直到它无法编译)。NET程序集的清单包含它所依赖的所有其他程序集的详细信息,但是没有任何说明“如果引用此程序集,还需要引用该程序集”。解决此问题的任何工具都必须使用反射来检查程序集中每个方法的所有返回值和参数的类型-这是一项非常具体的任务。是的,这是我在原始问题中已经写过的。真正的问题是,如何找到可能数百或数千个被引用项目中的哪一个是需要引用的项目。