警告“Y.cs中的类型X与Z.dll中导入的类型X冲突”

时间:2011-11-10 00:59:29

标签: c# .net types namespaces

我项目的 main.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) {
            /* .. */
        }
    }

}

main.cs

using MyClassLib;
using Extensions;

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

10 个答案:

答案 0 :(得分:56)

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

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

答案 1 :(得分:26)

似乎Extensions.cs是构建 lib.dll 项目和 main.exe

的项目的一部分

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

答案 2 :(得分:11)

我遇到过这种问题,我已将目标.NET Framework版本4.5.2还原为4.0

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

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

“项目A”已添加为“项目B”和“项目C”中的共享项目。

“项目A”还包括对“项目B”的传统参考。

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

检查您的项目参考必须有相同的项目参考。只是删除它,它会工作。

答案 8 :(得分:0)

有时候我得到这个错误 - 虽然在我的情况下这是一个错误..所有我需要做的就是修改它是将我的脚本文件名的第一个字母从大写改为小写在Explorer /中的文件中 (或者在我的情况下在Unity Engine中) 然后在我的脚本中相应地更改名称/类。 Idk为什么会发生这种情况..只是 - 并且Idk为什么这个修复工作..但在我的情况下它总是这​​样。 - 否则,对于2个差异脚本,您可能有2个相同脚本/相同类名的副本。希望这会有所帮助。

答案 9 :(得分:0)

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

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

  1. 打开我的项目
  2. 打开引用下拉菜单
  3. 在参考部分中查找 My.Example.Project
  4. 删除对 My.Example.Project 的引用

解决了!