【问题标题】:C# type defined in an assembly that is not referenced在未引用的程序集中定义的 C# 类型
【发布时间】:2010-08-07 20:03:44
【问题描述】:

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

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

然后我决定为B更改强命名密钥文件。我重建了项目B ok。当我尝试构建项目 A 时,我收到错误“错误 1 ​​类型 X 是在未引用的程序集中定义的。您必须添加对程序集 B 的引用,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = 95b41b0d6571627b”。 "

所以我删除了项目 A 中的引用并重新添加了它,不高兴。我可以在项目 A 中单击项目 B 引用,打开对象浏览器并在那里查看类型 X 确定。我还完全限定了 A 中的 X 型对象,智能感知很好地拾取了它们,但它仍然没有构建。

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

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

【问题讨论】:

  • 嗨梅林,没有 B 不是延迟签名的
  • 尝试创建一个全新的项目并添加对项目 B 的引用。这至少可以告诉您项目 A 或项目 B 是否有问题。
  • @Steve - 我试过了,新项目建得很好。
  • stackoverflow.com/questions/20660999/…中讨论了类似的问题

标签: c# assemblies reference


【解决方案1】:

根据你在 cmets 中所说的,我会说这绝对是 Project A 的问题。

也许这些步骤将有助于解决它:

  1. 删除对项目 B 的引用并保存
  2. 用记事本之类的破解打开.csproj文件
  3. 在其中查找对项目 B 的任何引用(可能是提示路径节点)并删除该节点。
  4. 如果项目 A 恰好是一个 ASP.NET 项目,请查看您的 web.config 或您的 aspx 页面标题以获取对项目 B 的任何引用。

删除对项目的所有引用后,按照瓶颈建议重新加载项目,看看是否可以解决问题。

【讨论】:

    【解决方案2】:

    对不起,回答晚了,但这对我有帮助:

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

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

    【讨论】:

    • 为什么要投反对票?这种方式不时地帮助我。
    • 也许是因为解决方案感觉像是一个杂物,并不能真正解决根本问题?
    • '潜在问题'可能存在于VS源代码中,因此我们无法修复。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • thnx 我在那里看了看,但参考看起来没问题。我已经取消了所有内容的签名,重新构建,然后应用新的密钥文件。
      【解决方案5】:

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

      我在引用一个延迟签名的程序集 A 时遇到此错误,该程序集 A 引用了在程序集 B 中定义的类型 X。我收到了 B 未被引用的错误(我已经在引用 B 的签名版本)。

      解决方法是查找并引用 A 的签名版本。

      【讨论】:

        【解决方案6】:

        这也发生在我身上。

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

        我再次添加了这个项目的新引用,重新编译等等,但不幸的是它没有工作。

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

        我希望这对其他人有用。

        【讨论】:

          【解决方案7】:

          如果 x 继承了 A,你必须在 B 中引用它

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-07-07
            • 2016-10-01
            • 1970-01-01
            • 2011-08-16
            • 2014-08-15
            • 2016-05-01
            • 2018-01-10
            • 1970-01-01
            相关资源
            最近更新 更多