我使用Add As Link选项在多个程序集中包含相同源文件的实例。我特别需要在这些程序集中包含相同源的实例,因为它负责必须在程序集内部进行的许可证验证。跨模块边界执行许可证调用可能会带来安全风险。
我的解决方案中包含代码的一些项目依赖于其他包含它的模块,导致警告CS0436:
“[licence.cs完整路径]中的类型[type]与导入的冲突 在[依赖项目中也包括licence.cs]中输入[LicenceClass]。 使用[licence.cs完整路径]中定义的类型“。
我已经尝试声明了一个类别名,但licence.cs内部的定义会导致相同的警告。在别名中,必须引用重复的类名,这会引起相同的警告。
我知道在程序集之间复制源是不好的做法,但在这种情况下它是故意的。我宁愿保留每个程序集链接到的中央实例,而不是具有重命名类的专用实例,以避免警告。
我的解决方法是使用#pragma
忽略警告。有更优雅的解决方案吗?
答案 0 :(得分:12)
值得注意的是,获得此类警告的另一种方法是在visual studio中设置项目以引用自身:参考 - >解决方案 - >等等(我如何计算出这个宝石作为练习留给读者......)
Visual Studio很乐意遵守,只是在构建过程中抛出一层OP所描述类型的警告,这是预期的(反思时),因为每个类等都被定义了两次。
答案 1 :(得分:10)
唯一发生冲突的时间是两个依赖类包含同一个类。有两种解决方法:
在导致CS0436的类中禁用警告:
#pragma warning disable 0436
拥有一个单独的类实例,在每个客户端项目中唯一命名(从维护的角度来看是不合需要的)。
编辑:还有一个解决方案:执行Mark在下面建议的内容,并标记重复的类internal
。
答案 2 :(得分:7)
当我迁移到VS2015时,我有一个从ASP.NET 3.5转换为4.5的Web应用程序。我开始将此视为警告,但解决方案仍然可以编译。没有循环引用,清除解决方案并删除bin
和obj
文件夹没有帮助。
事实证明,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。