C# “类型”;行动<;T1、T2、T3>&引用;存在于2个DLL中,如何指定使用哪一个或仅避免使用哪一个?
我使用Unity3D制作了一个应用程序,并使用了Unity 2019.1,但当我使用Unity 2019.1时,会出现以下错误:C# “类型”;行动<;T1、T2、T3>&引用;存在于2个DLL中,如何指定使用哪一个或仅避免使用哪一个?,c#,dll,types,socket.io,C#,Dll,Types,Socket.io,我使用Unity3D制作了一个应用程序,并使用了Unity 2019.1,但当我使用Unity 2019.1时,会出现以下错误: /.../Unity.app/Contents/Resources/PackageManager/BuiltInPackages/com.unity.timeline/Runtime/TrackAsset.cs(17,38): error CS0433: The type 'Action<T1, T2, T3>' exists in both 'WebSo
/.../Unity.app/Contents/Resources/PackageManager/BuiltInPackages/com.unity.timeline/Runtime/TrackAsset.cs(17,38): error CS0433: The type 'Action<T1, T2, T3>' exists in both 'WebSocket4Net, Version=0.14.1.0, Culture=neutral, PublicKeyToken=eb4e154b696bf72a' and 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
默认情况下,HashSet应该具有此方法
尝试从plugins文件夹中删除所有3个DLL以避免出现这些问题,但是我没有套接字
有办法解决这个问题吗?我不想深入到库中去修复这个错误,但是还有其他解决方案吗?我假设您的意思是“在相同的完整名称空间中”;如果这个假设是错误的,并且它们只是在不同的名称空间中,那么:只需使用全名限定,即
global::Foo.Bar.Whatever
,而不是Whatever
。为了方便起见,您还可以按每个文件添加“使用别名”,即
使用Mwahaha=global::Foo.Bar.Whatever;
现在,每当您在该文件中表示global::Foo.Bar.时,都可以使用Mwahaha
作为别名
所以,;回到我的假设,您的意思是“在相同的完整命名空间中”:
冲突的完整类型名称是一个主要的难题,如何修复它很大程度上取决于构建链。这里最简单的修复方法是鼓励库作者不要这样做,如果他们为兼容性添加的东西现在在“官方”位置可用(即,如果库A添加了类型,则稍后使用“官方”)版本添加到某个地方,库A可以删除其版本,并添加[汇编:TypeForwardedTo(typeof(type))]
其中类型现在来自“官方”如果类型确实兼容,则所有内容都应该正常工作,甚至不中断调用者;在A中需要该类型的调用者将被自动重定向到正式版本,甚至不需要重新编译)
否则
编译器支持这一点,但通过一种称为“外部别名”的方式。当您引用任何dll时,默认情况下,它会获取全局
命名空间别名。但是,特别是对于这个场景,您可以覆盖它,并告诉它每个dll使用哪个名称空间。因此,您可以说,从a.dll
到global
(即默认值),但是从b.dll
到blah
命名空间别名。然后,您需要在每个文件中使用,您希望从blah
(即从b.dll
)访问内容。这很快就会让人恼火,但效果很好。简短的版本是:
extern别名废话;
然后在该文件中的每个位置使用blah::Foo.Bar.which
引用b.dll中的Foo.Bar.which
;或与“使用别名”结合使用:
extern别名废话;
使用Mwahaha=blah::Foo.Bar.which;
现在Mwahaha
指的是Foo.Bar.Whatever
来自b.dll
但仅在该文件中
上面的文章介绍了如何使用csc
指定每个dll别名,但实际上几乎没有人直接使用csc
对于Visual Studio中的旧式csproj,可以在引用的“属性”窗口中指定别名。对于新型csproj,您必须使用丑陋的黑客:
废话
至于如何使用unity build链做到这一点:你的猜测和我的一样好
'HashSet<GameObject>' does not contain a definition for 'Contains' and no accessible extension method 'Contains' accepting a first argument of type 'HashSet<GameObject>' could be found (are you missing a using directive or an assembly reference?)