CS0436:键入与导入类型的冲突

时间:2013-02-19 16:11:43

标签: c# warnings

我使用Add As Link选项在多个程序集中包含相同源文件的实例。我特别需要在这些程序集中包含相同源的实例,因为它负责必须在程序集内部进行的许可证验证。跨模块边界执行许可证调用可能会带来安全风险。

我的解决方案中包含代码的一些项目依赖于其他包含它的模块,导致警告CS0436

  

“[licence.cs完整路径]中的类型[type]与导入的冲突   在[依赖项目中也包括licence.cs]中输入[LicenceClass]。   使用[licence.cs完整路径]中定义的类型“。

我已经尝试声明了一个类别名,但licence.cs内部的定义会导致相同的警告。在别名中,必须引用重复的类名,这会引起相同的警告。

我知道在程序集之间复制源是不好的做法,但在这种情况下它是故意的。我宁愿保留每个程序集链接到的中央实例,而不是具有重命名类的专用实例,以避免警告。

我的解决方法是使用#pragma忽略警告。有更优雅的解决方案吗?

5 个答案:

答案 0 :(得分:12)

值得注意的是,获得此类警告的另一种方法是在visual studio中设置项目以引用自身:参考 - >解决方案 - >等等(我如何计算出这个宝石作为练习留给读者......)

Visual Studio很乐意遵守,只是在构建过程中抛出一层OP所描述类型的警告,这是预期的(反思时),因为每个类等都被定义了两次。

答案 1 :(得分:10)

唯一发生冲突的时间是两个依赖类包含同一个类。有两种解决方法:

  1. 在导致CS0436的类中禁用警告:

    #pragma warning disable 0436
    
  2. 拥有一个单独的类实例,在每个客户端项目中唯一命名(从维护的角度来看是不合需要的)。

  3. 编辑:还有一个解决方案:执行Mark在下面建议的内容,并标记重复的类internal

答案 2 :(得分:7)

当我迁移到VS2015时,我有一个从ASP.NET 3.5转换为4.5的Web应用程序。我开始将此视为警告,但解决方案仍然可以编译。没有循环引用,清除解决方案并删除binobj文件夹没有帮助。

事实证明,VS2015对App_Code文件夹中的某些类不满意。这里的类与父文件夹中的其余网页具有相同的名称空间。一旦我将这些类从App_Code文件夹移到Web应用程序的顶层,警告便消失了。

答案 3 :(得分:0)

在.NET Core中,您还可以在project.json中禁用警告:

{
  "buildOptions":
  {
    "nowarn":
    [
      "CS0436"
    ]
  }
}

答案 4 :(得分:0)

我遇到了这个错误,但是没有2个不同的类!
每个新类都与自己冲突,因此很明显我有CS0436 Error

经过一番挣扎,发现我在多人Unity项目中使用的是Mirror Asset。镜以某种方式包含了我创建的每个新类(并继承自NetworkBehavior)。

我的外部编辑器是VSCode(Visual Studio代码,解决方案也可能适用于Visual Studio)。

解决方案


Edit / Preferences / External tools / "Generate .csproj files for:"
我开始测试不同的设置,这对我有用:
(不确定确切的设置是否适用于所有人,但项目中没有正确的文件会导致此错误。就像我的情况一样。)

在应用这些设置(或适合您的项目的设置)后,单击Regenerate project files并重新启动Unity和VSCode。