Skip to content

IL2CPP build fails when using [SyncObject] on an object with nullable properties #135

@aleevans

Description

@aleevans

I am syncing a SyncDictionary<int, OrbitData> where orbit data is a class I have written. Here is a snippet of some of the properties in the class:

image

FishNet is causing a build error in Unity when building for UWP/ARM64 IL2CPP. The error is as follows:

IL2CPP error (no further information about what managed code was being converted is available)
Unity.IL2CPP.HashCodeCollisionException: Hash code collision on value `7F35D83A8537EC0D366E7437F501FCEBFA0C7A97`
Existing Item was : `System.Void FishNet.Runtime.GeneratedWriters___FN::Write___System.Nullable`1<System.Double>(FishNet.Serializing.Writer,System.Nullable`1<System.Double>)`
Colliding Item was : `System.Void FishNet.Runtime.GeneratedWriters___FN::Write___System.Nullable`1<System.Double>(FishNet.Serializing.Writer,System.Nullable`1<System.Double>)`

   at Unity.IL2CPP.HashCodeCache`1.GetUniqueHash(T value)
   at Unity.IL2CPP.Naming.NamingComponent.ForMethodInternal(MethodReference method)
   at Unity.IL2CPP.Naming.NamingComponent.ForMethodNameOnly(MethodReference method)
   at Unity.IL2CPP.AssemblyConversion.PrimaryCollection.Steps.Global.WarmNamingComponent.ProcessItem(GlobalPrimaryCollectionContext context, AssemblyDefinition item, Object globalState)
   at Unity.IL2CPP.AssemblyConversion.Steps.Base.GlobalScheduledStepAction`2.ProcessAllItems(TWorkerContext context, ReadOnlyCollection`1 items)
   at Unity.IL2CPP.AssemblyConversion.Steps.Base.GlobalScheduledStepAction`2.WorkerWrapper(WorkItemData`3 workerData)
   at Unity.IL2CPP.Contexts.Scheduling.PhaseWorkScheduler`1.WorkerLoop(Object data)

and

Exception: IL2CPP error for method 'System.Void FishNet.Runtime.GeneratedWriters___FN::Write___System.Nullable`1<System.Double>(FishNet.Serializing.Writer,System.Nullable`1<System.Double>)' in assembly 'E:\Repos\TestProject\Temp\StagingArea\Data\Managed\Assembly-CSharp.dll'
Unity.IL2CPP.HashCodeCollisionException: Hash code collision on value `7F35D83A8537EC0D366E7437F501FCEBFA0C7A97`
Existing Item was : `System.Void FishNet.Runtime.GeneratedWriters___FN::Write___System.Nullable`1<System.Double>(FishNet.Serializing.Writer,System.Nullable`1<System.Double>)`
Colliding Item was : `System.Void FishNet.Runtime.GeneratedWriters___FN::Write___System.Nullable`1<System.Double>(FishNet.Serializing.Writer,System.Nullable`1<System.Double>)`

   at Unity.IL2CPP.HashCodeCache`1.GetUniqueHash(T value)
   at Unity.IL2CPP.Naming.NamingComponent.ForMethodInternal(MethodReference method)
   at Unity.IL2CPP.Naming.NamingComponent.ForMethodNameOnly(MethodReference method)
   at Unity.IL2CPP.Attributes.AttributeNamingExtensions.ForCustomAttributesCacheGenerator(INamingService naming, MethodDefinition methodDefinition)
   at Unity.IL2CPP.Attributes.AttributeSupportCollector.Add(MethodDefinition methodDefinition)
   at Unity.IL2CPP.Attributes.AttributeSupportCollector.Collect(TypeDefinition type)
   at Unity.IL2CPP.Attributes.AttributeSupportCollector.Collect(AssemblyDefinition assembly)
   at Unity.IL2CPP.Attributes.AttributeSupportCollector.Collect(MinimalContext context, AssemblyDefinition assembly)
   at Unity.IL2CPP.AssemblyConversion.PrimaryCollection.Steps.PerAssembly.AttributeSupportCollection.ProcessItem(GlobalPrimaryCollectionContext context, AssemblyDefinition item)
   at Unity.IL2CPP.AssemblyConversion.Steps.Base.ScheduledItemsStepFunc`5.WorkerWrapper(WorkItemData`3 workerData)
   at Unity.IL2CPP.Contexts.Scheduling.PhaseWorkScheduler`1.ContinueWithResultsWorkItem`4.InvokeWorker(Object context, Int32 uniqueId)
   at Unity.IL2CPP.Contexts.Scheduling.PhaseWorkScheduler`1.BaseContinueWorkItem`2.Invoke(Object context, Int32 uniqueId)
   at Unity.IL2CPP.Contexts.Scheduling.PhaseWorkScheduler`1.WorkerLoop(Object data)
UnityEditorInternal.Runner.RunProgram (UnityEditor.Utils.Program p, System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
UnityEditorInternal.Runner.RunManagedProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser, System.Action`1[T] setupStartInfo) (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
UnityEditorInternal.IL2CPPBuilder.RunIl2CppWithArguments (System.Collections.Generic.List`1[T] arguments, System.Action`1[T] setupStartInfo) (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
UnityEditorInternal.IL2CPPBuilder.ConvertPlayerDlltoCpp (UnityEditor.Il2Cpp.Il2CppBuildPipelineData data) (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
UnityEditorInternal.IL2CPPBuilder.Run () (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
UnityEditorInternal.IL2CPPUtils.RunIl2Cpp (System.String tempFolder, System.String stagingAreaData, UnityEditorInternal.IIl2CppPlatformProvider platformProvider, System.Action`1[T] modifyOutputBeforeCompile, UnityEditor.RuntimeClassRegistry runtimeClassRegistry) (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
PostProcessWinRT.RunIL2CPPForProjectBuild () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:1910)
PostProcessWinRT.RunIL2CPP () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:1879)
PostProcessWinRT.Process () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:211)
UnityEditor.UWP.BuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/ExtensionModule.cs:86)
Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown.
UnityEditor.UWP.BuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/ExtensionModule.cs:90)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <7ac35247888b44f4a7e290f1f6bb33f3>:0)
UnityEditor.BuildPipeline:BuildPlayer(String[], String, BuildTarget, BuildOptions)
Microsoft.MixedReality.Toolkit.Build.Editor.UnityPlayerBuildTools:BuildUnityPlayer(IBuildInfo) (at Library/PackageCache/com.microsoft.mixedreality.toolkit.foundation@a41bb5006f91-1666138953955/Core/Utilities/BuildAndDeploy/UnityPlayerBuildTools.cs:114)
Microsoft.MixedReality.Toolkit.Build.Editor.<BuildPlayer>d__2:MoveNext() (at Library/PackageCache/com.microsoft.mixedreality.toolkit.foundation@a41bb5006f91-1666138953955/Core/Utilities/BuildAndDeploy/UwpPlayerBuildTools.cs:121)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:Start(<BuildPlayer>d__2&)
Microsoft.MixedReality.Toolkit.Build.Editor.UwpPlayerBuildTools:BuildPlayer(UwpBuildInfo, CancellationToken)
Microsoft.MixedReality.Toolkit.Build.Editor.<BuildPlayer>d__1:MoveNext() (at Library/PackageCache/com.microsoft.mixedreality.toolkit.foundation@a41bb5006f91-1666138953955/Core/Utilities/BuildAndDeploy/UwpPlayerBuildTools.cs:104)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:Start(<BuildPlayer>d__1&)
Microsoft.MixedReality.Toolkit.Build.Editor.UwpPlayerBuildTools:BuildPlayer(String, Boolean, CancellationToken)
Microsoft.MixedReality.Toolkit.Build.Editor.<BuildAll>d__118:MoveNext() (at Library/PackageCache/com.microsoft.mixedreality.toolkit.tools@51e1bb79f4a9-1664308176769/BuildWindow/BuildDeployWindow.cs:1259)
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start(<BuildAll>d__118&)
Microsoft.MixedReality.Toolkit.Build.Editor.BuildDeployWindow:BuildAll(Boolean)
Microsoft.MixedReality.Toolkit.Build.Editor.<>c:<RenderWSABuildView>b__97_0() (at Library/PackageCache/com.microsoft.mixedreality.toolkit.tools@51e1bb79f4a9-1664308176769/BuildWindow/BuildDeployWindow.cs:357)
UnityEditor.EditorApplication:Internal_CallDelayFunctions()

The app runs fine in editor with the nullable properties. When I change the nullable properties to be non-nullable, the build succeeds.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions