当同一个文件被包含在两个项目中时,如果我忽略CS0436“与导入的类型X的类型X冲突”会发生什么可怕的事情?

时间:2014-09-01 08:36:08

标签: c# .net

我有一个类似于this one的设置 - 相同的.cs文件包含在多个项目中(从技术上讲,它存在于项目中,并且快捷方式被添加到另一个项目中,因此有一个副本在任何时候的文件)然后从另一个项目中引用其中一个项目,我收到type X conflicts with the imported type X警告。我知道我可以通过crafting a class library referenced from both projects解决这个问题,但这是我现在应该避免的额外工作。

在这种情况下忽略警告是否安全?会发生什么坏事?

2 个答案:

答案 0 :(得分:1)

这两种类型不可互换。您可以单独声明,但它们将是完全独立的类型。类型解析可能非常尴尬 - 尤其是如果无法使用extern别名。如果他们永远不会离开调用范围,那可能没问题。但是,在一般情况下,不是一个好主意,应该避免。运行时类型不匹配很可能,因为在编译时类型解析失败。

将来的另一个选项可能是assembly neutral types;除非编译器框架处理它,否则这不适用 - 并且它可能仅限于我所知道的asp.net mvc堆栈,但理论上

[AssemblyNeutral, AttributeUsage(AttributeTargets.Class
    | AttributeTargets.Interface | AttributeTargets.Struct,
    AllowMultiple = false, Inherited = false)]
internal sealed class AssemblyNeutralAttribute : Attribute { }

然后在你的类型上敲打[AssemblyNeutral]

答案 1 :(得分:0)

发现这个:

  

您已添加对项目输出的引用。

     

换句话说,在尝试编译您的项目时,AriaLibrary,以   生成AriaLibrary.exe,编译器导入程序集   AriaLibrary.exe。在磁盘上,此文件存在于以前的版本中。

     

因此,编译器会找到该类中的两个,它会尝试一个   现在编译,从前一个版本编译,因此你得到了   警告。

     

由于输出项目没有正当理由   作为对自身的引用导入,您可以安全地删除它   参考

这里:The type 'x' in 'x.cs' conflicts with the imported type 'x'

但是在回答你的实际问题时,我(猜测)你可能会遇到来自碰撞/等的问题,并因此形成运行时错误?