我有一个类似于this one的设置 - 相同的.cs文件包含在多个项目中(从技术上讲,它存在于项目中,并且快捷方式被添加到另一个项目中,因此有一个副本在任何时候的文件)然后从另一个项目中引用其中一个项目,我收到type X conflicts with the imported type X
警告。我知道我可以通过crafting a class library referenced from both projects解决这个问题,但这是我现在应该避免的额外工作。
在这种情况下忽略警告是否安全?会发生什么坏事?
答案 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'
但是在回答你的实际问题时,我(猜测)你可能会遇到来自碰撞/等的问题,并因此形成运行时错误?