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

本文关键字:类型 文件包 同一个 冲突 项目 两个 导入 什么 如果 CS0436 | 更新日期: 2023-09-27 18:20:07

我有一个类似于此的设置-同一个.cs文件包含在多个项目中(从技术上讲,它位于项目中,并向另一个项目添加了快捷方式,因此始终有一个文件副本),然后其中一个项目被另一个引用,我收到type X conflicts with the imported type X警告。我知道我可以通过制作一个从两个项目中引用的类库来解决这个问题,但这是我现在宁愿避免的额外工作。

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

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

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

未来的另一个选项可能是程序集中性类型;除非编译器框架处理它,否则这不适用——据我所知,它可能仅限于asp.net mvc堆栈,但理论上

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

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

发现这个:

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

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

因此,编译器会找到该类中的两个,一个尝试现在编译,然后从以前的版本中编译一个,这样您就可以获得警告

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

here:类型';x';在';x.cs';与导入的类型冲突';x';

但在回答你的实际问题时,我猜你可能会因此而遇到冲突等和表单运行时错误的问题?