UWP IL2CPP Failed to resolve System.IO.WindowsRuntimeStorageExtensions

Hi,
Using Unity 2017.2.1p2
Building UWP, XAML, IL2CPP

  • I have a .NET 4.6 assembly ( WSAStub.dll ) in Plugins/WSA.
  • This assembly links to Vungle’s ads SDK (v5.1.0)
  • I’ve also added VungleSDK.winmd to Plugins/WSA, so Unity can resolve the references during export
  • It seems like the Vungle SDK has references to System.IO.WindowsRuntimeStorageExtensions

When I try to build I get the following Unity error:

Fatal error in Unity CIL Linker
Mono.Linker.LoadException: Error while processing references of ‘Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ —> Mono.Linker.LoadException: Error while processing references of ‘NativeComm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ —> Mono.Linker.LoadException: Error while processing references of ‘WSAStub, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ —> System.InvalidProgramException: Failed to resolve [System.Runtime.WindowsRuntime]System.IO.WindowsRuntimeStorageExtensions.

If I remove Vungle’s SDK and remove the references to vungle in my assembly the build succeeds.
Is this a bug in Unity?

Right now I have Visual Studio 2015 with Microsoft.NETCore.UniversalWindowsPlatform v5.1.0.
Do I have to update to Visual Studio 2017 and Microsoft.NETCore.UniversalWindowsPlatform v6.0.6?

Here’s the full stack of the error:

Failed running C:\dev\tools\unity\Editor\Data\il2cpp/build/UnityLinker.exe --api=NET_4_6 -out=“C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\tempStrip” -l=none -c=link --link-symbols -x=“C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Core.xml” -f=“C:\dev\tools\unity\Editor\Data\il2cpp\LinkerDescriptors” -x “C:\dev\projects\jump\unity/Temp\StagingArea\Data/methods_pointedto_by_uievents.xml” -x “C:\dev\projects\jump\unity/Temp\StagingArea\Data/UnityEngine.xml” -x “C:\dev\projects\jump\unity\Temp\StagingArea\Data\preserved_derived_types.xml” -x “C:\dev\tools\unity\Editor\Data\il2cpp\LinkerDescriptors\mscorlib45.xml” -x “C:\dev\tools\unity\Editor\Data\il2cpp\LinkerDescriptors\System45.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Accessibility.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\AI.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Animation.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\AR.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Audio.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Cloth.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Core.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\CrashReporting.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Director.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\GameCenter.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Grid.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\ImageConversion.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\IMGUI.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Input.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\JSONSerialize.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\ParticlesLegacy.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\ParticleSystem.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\PerformanceReporting.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Physics.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Physics2D.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\ScreenCapture.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\SpriteMask.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\StyleSheets.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Terrain.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\TerrainPhysics.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\TextRendering.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Tilemap.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UI.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UIElements.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UNET.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UnityAnalytics.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UnityConnect.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UnityWebRequest.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UnityWebRequestAudio.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UnityWebRequestTexture.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\UnityWebRequestWWW.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Vehicles.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Video.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\VR.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Web.xml” -x “C:\dev\tools\unity\Editor\Data\PlaybackEngines\MetroSupport\Whitelists\Wind.xml” -x “C:\dev\projects\jump\unity\Assets\link.xml” -d “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\Assembly-CSharp-firstpass.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\Assembly-CSharp.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\UnityEngine.UI.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\DOTween.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\NestedPrefabs.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\Rewired_Core.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\TextMeshPro-1.0.55.2017.1.0b12.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\UnityEngine.Analytics.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\I18N.CJK.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\I18N.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\I18N.MidEast.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\I18N.Other.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\I18N.Rare.dll” -a “C:\dev\projects\jump\unity\Temp\StagingArea\Data\Managed\I18N.West.dll”

stdout:
Fatal error in Unity CIL Linker
Mono.Linker.LoadException: Error while processing references of ‘Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ —> Mono.Linker.LoadException: Error while processing references of ‘NativeComm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ —> Mono.Linker.LoadException: Error while processing references of ‘WSAStub, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ —> System.InvalidProgramException: Failed to resolve [System.Runtime.WindowsRuntime]System.IO.WindowsRuntimeStorageExtensions.
at Unity.IL2CPP.AssemblyDependenciesComponent.ResolveWindowsRuntimeReferences(AssemblyDefinition assembly)
at Unity.IL2CPP.AssemblyDependenciesComponent.CollectAssemblyDependencies(AssemblyDefinition assembly)
at Unity.IL2CPP.AssemblyDependenciesComponent.GetReferencedAssembliesFor(AssemblyDefinition assembly)
at UnityLinker.UnityLinkContext.ResolveReferences(AssemblyDefinition assembly)
at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences(AssemblyDefinition assembly)
at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences(AssemblyDefinition assembly)
— End of inner exception stack trace —
at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences(AssemblyDefinition assembly)
at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences(AssemblyDefinition assembly)
— End of inner exception stack trace —
at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences(AssemblyDefinition assembly)
at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences(AssemblyDefinition assembly)
— End of inner exception stack trace —
at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences(AssemblyDefinition assembly)
at Mono.Linker.Steps.BaseStep.Process(LinkContext context)
at Mono.Linker.Pipeline.Process(LinkContext context)
at UnityLinker.UnityDriver.Run()
at UnityLinker.UnityDriver.RunDriver()
stderr:

UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73) UnityEditorInternal.AssemblyStripper:RunAssemblyLinker(IEnumerable1, String&, String&, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:89)
UnityEditorInternal.AssemblyStripper:StripAssembliesTo(String[ ], String[ ], String, String, String&, String&, String, IIl2CppPlatformProvider, IEnumerable1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:82) UnityEditorInternal.AssemblyStripper:RunAssemblyStripper(String, IEnumerable, String, String[ ], String[ ], String, IIl2CppPlatformProvider, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:204) UnityEditorInternal.AssemblyStripper:StripAssemblies(String, IIl2CppPlatformProvider, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:114) UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:143) UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action1, RuntimeClassRegistry, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:34)
PostProcessUAPIl2Cpp:RunIL2CPP() (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessUAPIl2Cpp.cs:394)
PostProcessWinRT:process() (at C:/buildslave/unity/build/PlatformDependent/WinRT/SharedSources/CSharp/PostProcessWinRT.cs:222)
UnityEditor.DefaultBuildMethods:BuildPlayer(BuildPlayerOptions)
UnityEditorHelper.BundleManager:b__0(BuildPlayerOptions)
UnityEngine.GUIUtility:processEvent(Int32, IntPtr)

Yeah, it’s a missing functionality in IL2CPP. Can we get a bug report for this?

Yes, case 992138