在未引用的程序集中定义的C#类型

时间:2010-08-07 20:03:44

标签: c# assemblies reference

我有两个项目A和B.项目A在项目B中使用了类型X,所以我在A中添加了对B的引用。一切都很好。

我使用强名称密钥文件签署了项目B.一切都还不错。

然后我决定更改B的强名称密钥文件。我重建了项目B ok。当我尝试构建项目AI时收到错误“错误1类型X在未引用的程序集中定义。您必须添加对程序集B的引用,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 95b41b0d6571627b'。 “

所以我删除了项目A中的引用并将其重新添加回来,没有任何乐趣。我可以dbl点击项目A中的项目B引用,打开对象浏览器并在那里看到类型X确定。我也完全限定了A中的X型对象,而intellisense对它们进行了很好的检测,但它仍然没有构建。

我认为更改密钥文件我可能需要修改版本,因此我将程序集B版本更改为2.0.0.0但仍抱怨它需要版本1.0.0.0。查看A中B引用的属性,它肯定指向正确的版本,实际上它显示为2.0.0.0

我可以使用现有的密钥文件,但如果可能的话,我想了解我的错误。

7 个答案:

答案 0 :(得分:4)

根据你在评论中所说的内容,我会说这绝对与项目A有关。

也许这些步骤有助于解决问题:

  1. 删除对项目B的引用并保存
  2. 用记事本或其他东西
  3. 破解.csproj文件
  4. 在那里查找对项目B的任何引用(可能是一个提示路径节点)并删除该节点。
  5. 如果项目A恰好是一个ASP.NET项目,请查看您的web.config或您的aspx页面标题,以获取对项目B的任何引用。
  6. 删除对项目的所有引用后,按照建议的瓶颈重新加载项目,看看是否能为您修复它。

答案 1 :(得分:1)

对不起,迟到的回答,但这对我有所帮助:

(假设您目前拥有AnyCPU解决方案平台)

  • 将解决方案平台切换到x86。
  • 编译
  • 切换回来
  • 再次编译。

答案 2 :(得分:0)

您可以尝试编辑项目A的项目文件(projectA.csproj)。要通过visual studio执行此操作,请右键单击project-> unload项目,然后在卸载的项目上单击右键单击>编辑文件。在那里搜索对项目B的引用,并尝试根据需要进行更正

答案 3 :(得分:0)

如果x继承A,则必须在B

中引用它

答案 4 :(得分:0)

对我有用的是删除对项目的引用,然后再将其重新添加。出现了一条新的错误消息,指出我需要引用缺少的第三个库,因此原始消息有点误导!

答案 5 :(得分:0)

为了帮助人们从Google访问,Merlyn's comment询问延迟签名是我的答案。

我得到了这个错误,引用了延迟签名的程序集A,该程序集引用了程序集B中定义的类型X.我得到了B未被引用的错误(我已经引用了B的签名版本)。

修复方法是查找并引用A的签名版本。

答案 6 :(得分:0)

这也发生在我身上。

在我的情况下,问题是从解决方案A引用了解决方案B的项目(我从B更改了项目的名称)。当我尝试编译A时,它试图在B中找到项目的旧名称。

我再次添加了该项目的新参考,重新编译等等,但是希望它没有用。

当我在A中再次添加B的所有引用时,此问题已解决。我正在加载用B的旧项目编译的旧DLL。这些DLL与旧引用有某种交叉交互作用。

我希望这项工作对别人有用。