如何处理'File1.cs'中的类型'Foo'与'File2.dll'中的导入类型'Foo'发生冲突

时间:2011-06-21 13:16:54

标签: c# visual-studio-2010 compiler-warnings pragma

我有以下解决方案结构: 项目A. 项目B(WCF) 项目C(单元测试)

我从项目B生成代理。然后代理包含在项目A和项目C中。 项目C还引用了项目A. 因此,在编译时我得到了超过一千种类型的警告:

  

'File1.cs'中的类型'Foo'与'File2.dll'中导入的类型'Foo'冲突。

这个问题的最佳解决方案是什么?我尝试使用#PRAGMA IGNORE,但在这种情况下我找不到警告号。

谢谢!

6 个答案:

答案 0 :(得分:2)

最好的情况是使用不同的命名空间。

所以ProjectA

namespace Project.Library

项目B

namespace Project.Service

项目C

namespace Project.Test

然后,您可以在冲突类中使用别名。

例如,说Project.Library.User和Project.Service.User都存在。

您想要在您的服务中访问您图书馆的用户类,您可以这样做:

using Library = Project.Library;

namespace Project.Service
{
     public class User
     {
          public int GetUserId()
          {
              Library.User myLibUser = new Library.User();
              return myLibUser.Id;
          }
     }
}

答案 1 :(得分:1)

当你访问你的类型时,完全限定它(通过名称空间(。).class调用它,这样就不会有歧义。

例如:

  • MyNamespace.Foo
  • YourNamespace.Foo

所以你有相同的类名,但在不同的名称空间下。

如果您使用与导入的东西相同的名称空间(这不太可能),那么您或外部代码提供者将不得不更改名称空间。

答案 2 :(得分:1)

我遇到了同样的问题。我正在使用VS 2010专业版。我忽略了大约10个小时;不只是错误,而是在编译时的错误。然后,BAM!

我所做的只是导航到Build标签,然后点击清洁解决方案 问题解决了。请确保,您不会在您的使用陈述中处理任何不需要处理的内容。

答案 3 :(得分:0)

从Solution \ References中删除对已编译文件的引用:)

答案 4 :(得分:0)

在“类属性”中,将“构建操作从内容更改为编译”

答案 5 :(得分:0)

当您知道自己在做什么时,可以使用Pragma 0246 来抑制警告。

我通过启动构建找到了错误代码,然后查看输出窗口。 确保在下拉列表中选择了“构建”。