【问题标题】:Warning “The type X in Y.cs conflicts with the imported type X in Z.dll”警告“Y.cs 中的 X 类型与 Z.dll 中导入的 X 类型冲突”
【发布时间】:2011-12-25 19:20:18
【问题描述】:

我的项目的 ma​​in.cs 返回以下警告:

警告 1 'PATH\Extensions.cs' 中的类型 'Extensions.MessageDetails' 与 'path\lib.dll' 中导入的类型 'Extensions.MessageDetails' 冲突。使用“path\Extensions.cs”中定义的类型。路径\main.cs

我的项目有什么问题?如何摆脱警告?

我的项目代码结构如下:

Extensions.cs

namespace Extensions
{

    public class MessageDetails
    {
        public string message { get; set; }
        public string link { get; set; }
        public string picture { get; set; }
        public string name { get; set; }
        public string caption { get; set; }
        public string description { get; set; }
        public string userid { get; set; }
        public string username { get; set; }

        public object actions { get; set; }
        public object privacy { get; set; }
        public object targeting { get; set; }
    }

}

lib.dll

namespace MyClassLib {

    public class MyClassLibFoo {
        public void foo(MessageDetails parameters) {
            /* .. */
        }
    }

}

ma​​in.cs

using MyClassLib;
using Extensions;

class Program
{
    static void Main(string[] args)
    {
        MessageDetails md = new MessageDetails();
    }
}

【问题讨论】:

  • 您的扩展类是否有两份副本(一份打包在您的 dll 中,一份在您的主程序中)?
  • 是的,我需要在命名空间Extensions 类中使用MessageDetails..
  • 那是你的问题,他们都需要引用同一个。尝试将其添加到类库中以执行此操作。
  • 这发生在我在 Visual Studio 2015 的一个古老的 webforms 项目中,这样 App_Code 中的代码被编译了两次,这使得它变得模棱两可。

标签: c# .net types namespaces


【解决方案1】:

在我的案例中,使用 Visual Studio 2013,我发现我的一个类库已经开发了对自身的引用。我认为它是在我向解决方案中添加一个新项目时发生的,或者它是一个错误,但无论哪种方式,它都会导致这个确切的问题。

检查您的项目引用是否有任何循环引用。

【讨论】:

  • 我发现这也是我这个错误的原因。这很奇怪。
  • 在 vs 2015 中似乎仍然是一个问题,因为这是我的确切问题。
  • 好答案。首先要检查的是您对项目的引用,因此在解决方案资源管理器中展开它,您可能会发现您的项目本身被添加为引用,选择它并删除它。我的问题出现在 ReSharper 中,我在各个地方使用了重构工具,并设法将项目添加为参考。
  • 这发生在我在 Unity 和 VSCode 中复制 ScriptableObject,然后重命名文件和类定义时。重启 VSCode 解决了。
  • 这解决了我在 VS2017 中的问题,我的猜测是基于上面的 cmets,它是 ReSharper 和虚假的 Alt-Enter 添加引用。
【解决方案2】:

似乎Extensions.cs 既是构建 lib.dll 的项目的一部分,又是您的 ma​​in.exe

从其中一个项目中删除它以解决此问题。

【讨论】:

  • ty,出于某种原因,vs 添加了我的项目作为参考。
  • 疯了为什么我们有这个,从来没有意识到这是可能的!
  • 是的。我不知道我的项目如何引用自己并导致一堆错误
【解决方案3】:

我从目标 .NET Framework 版本的4.5.2 恢复到4.0 时遇到了此类问题。

我的 App_Code 文件夹中的类具有调用该文件夹中其他类中的方法的方法。当我创建一个名为“AppCode”的标准文件夹并将我的类移到其中时,我不再遇到问题。

如果我重新创建“App_Code”文件夹并将我的课程移回其中,我将再次遇到此问题。我确信这与我的 .NET Framework 版本有关,或者 Visual Studio 在最初构建/定位到另一个版本后无法很好地更改它。

【讨论】:

  • 究竟是什么帮助我解决了 VS2017 框架版本 4.5.2 中的这种奇怪行为。 Studio 显示我在 C#5 项目中使用 C#6 功能的疯狂警告,并且该文件夹中的类型与导入的自身冲突,并且 linq 语句缺少某些内容,ReSharper 仅对类中的方法进行了重命名重构。跨度>
  • @Boltyk 是的 - 它会丢失对类的引用。
【解决方案4】:

您不能有两个扩展类的副本,即使代码相同,它们也不会被视为同一个对象。您的 dll 和主应用程序都需要引用完全相同的。

您可以尝试创建一个“通用文件”类库并向其中添加扩展类,这样您将始终使用正确的类

【讨论】:

    【解决方案5】:

    我在同样托管在 NuGet 上的项目中遇到了这个问题。我检查了所有项目参考。最后,对象浏览器显示我的旧版 NuGet 包的 DLL 以某种方式从 NuGet 缓存文件夹(“C:\Users\{username}\.nuget\packages”)加载到 Visual Studio 中。我从缓存文件夹中删除了包,它从对象浏览器中消失了,一切都恢复正常了。

    【讨论】:

      【解决方案6】:

      我有一个共享项目“项目 A”,它同时包含在“项目 B”和“项目 C”中。

      “项目 A”作为共享项目添加到“项目 B”和“项目 C”中。

      “项目 A”还包括对“项目 B”的传统引用。

      为了纠正这个问题,我从“项目 A”中删除了对“项目 B”的引用。

      【讨论】:

        【解决方案7】:

        如果您确实需要在两个单独的 dll 中声明或引用这两个类,您可以将您的类标记为 internal

        内部类型或成员只能在同一程序集中的文件中访问,因此可以防止冲突。

        【讨论】:

          【解决方案8】:

          我也遇到过同样的问题。只是一个简单的解决方案。

          检查您的项目引用必须有相同的项目引用。只需删除它,它就会起作用。

          【讨论】:

            【解决方案9】:

            有时我会收到此错误 - 虽然在我的情况下这是一个错误.. 我所要做的就是将我的脚本文件名的第一个字母从大写更改为资源管理器中的文件中的小写 / (或者在我的情况下在 Unity Engine 中) 然后在我的脚本中相应地更改名称/类。 Idk 为什么会发生这种情况.. 确实如此 - 而且 Idk 为什么此修复有效.. 但在我的情况下它总是如此。 - 否则,对于 2 个差异脚本,您可能有 2 个相同脚本/相同类名的副本。希望这会有所帮助。

            【讨论】:

              【解决方案10】:

              在阅读了许多关于 SO 的答案后,解决方案仍然不清楚。我的情况类似,但通过以下方式找到了解决方案:

              示例项目名称:My.Example.Project

              1. 打开我的项目
              2. 打开参考下拉列表
              3. 在参考部分找到 My.Example.Project
              4. 删除对 My.Example.Project 的引用

              解决了!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-09-19
                • 1970-01-01
                相关资源
                最近更新 更多