VS告诉我添加一个引用到一个看似不相关的程序集.如何找出原因

本文关键字:一个 程序集 不相关 何找出 添加 告诉我 引用 VS | 更新日期: 2023-09-27 18:17:34

我创建了一个新的单元测试项目来测试我的NHibernate映射。
NHibernate映射在一个包含EF实体的项目中。
在我的单元测试中,我只使用甚至没有间接引用实体框架的类型,但是,当我编译单元测试项目时,我得到以下错误:

类型为"system . data . objects . dataclass"。IEntityWithRelationships'在未引用的程序集中定义。必须添加对程序集"System.Data"的引用。实体,版本=3.5.0.0,文化=中性,PublicKeyToken=b77a5c561934e089'.

是否有办法找出,为什么需要这个参考?我已经多次检查了所有使用的类,但没有找到任何内容…

我觉得我在这里错过了什么…

VS告诉我添加一个引用到一个看似不相关的程序集.如何找出原因

您可以使用DLL检查工具(如JustDecompile(免费!)或Reflector)并查看测试引用的DLL内部。希望您能很快发现Using语句,并更清楚地了解发生了什么。

如前所述,双击将拉出错误位置,但只有当它在您编写的代码中,第三方dll自然不会合作。

祝你好运:)

你确定你没有使用继承或实现System.Data中的任何类型的类型。实体,这可能被深埋在继承链中,就像使用一个方法返回一个对象定义在你的DAL直接实现IEntityWithRelationships或从基类也定义在你的DAL,这将隐藏使用System.Data.Entity从你的测试程序集当你试图找到引用,因为它会显示为使用实体在你的DAL代替…(这取决于你使用什么功能来确定这一点,我只是猜测像"查找用法")

。在你的A、B、C的例子中……如果A使用继承自C2的B3类。当搜索C2上的用法时,您只会找到B3而不是A。但是由于A使用继承了C2的B3,因此A需要对C的引用

我将检查开心果。它被用来加载.csproj,然后找到项目中的所有资源以及它们的使用位置。找出需要DLL的地方可能值得一试。

您可以使用http://checkasm.booring.net/CheckAsm工具。加载您在项目中直接引用的所有程序集,并找出哪个程序集正在使用丢失的引用。从那里你需要问那个引用的提供者为什么他们需要那个程序集。

希望这对你有帮助。

我唯一能想到的是…既然你在使用NHibernate和EF,我猜你在做某种类型的POCO实现。我在网上看到过一些关于用NHibernate和EF实现POCO的东西,你定义的基类实现了IEntityWithRelationships接口。如果是这样就能解释了。

你正在引用一个库,它有一个公共方法或属性,返回一个' system . data . objects . datacclasses '。IEntityWithRelationships’或接受一个作为参数。不管你是否在实际使用这个方法,因为它是公共的,你的代码必须能够确定你引用的库中所有方法的方法签名。如果方法是内部的,您就不会看到这个问题。

我想你只是尝试双击错误?这通常会涉及到使用未知类型的实际点(返回值/属性或继承/实现)。

如果这不起作用,那么它一定是在编译器的魔法代码(可能是人们指出的EF,或其他地方)。在这种情况下,我的建议是将引用添加到您的测试程序集。然后在Reflector中打开它并查看编译后的MSIL。因为它给了你一个特定的接口,你甚至可以去那个接口,问反射器在哪里被引用,看看它在你的程序集。

可能是你的一个类与ef类同名吗?然后,它可能是VS生成代码应用接口IEntityWithRelationships到你的类,以模拟类的POCO映射。

要在数据模型中使用POCO实体,实体类型的名称必须与自定义数据类相同,并且实体类型的每个属性必须映射到自定义数据类的公共属性。类型的名称和每个映射属性的名称必须相等。

来源:http://msdn.microsoft.com/en-us/library/dd456853.aspx

这可能是无关的,但我有类似的错误前一段时间,我清除了ASP。. NET程序集缓存文件夹,它解决了我的问题。

文件夹在这里

{windows folder}'Microsoft.NET'Framework'v4.0.30319'Temporary ASP.NET Files

,它保存的是旧版本的程序集