Extenject
Extenject copied to clipboard
Fatal error in Unity CIL Linker when using ZenjectTestFramework and stripping is enabled - Failed to resolve assembly : NUnit
Describe the bug Unity linker fail when building a project that use ZenjectTestFramework in project and stripping is enabled.
Building Library\Bee\artifacts\WinPlayerBuildProgram\ManagedStripped failed with output:
D:\Program Files\Unity\Hub\Editor\2022.2.3f1\Editor\Data\il2cpp\build\deploy\UnityLinker.exe --search-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/Bee/PlayerScriptAssemblies --search-directory=D:/Program Files/Unity/Hub/Editor/2022.2.3f1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/Variations/il2cpp/Managed --search-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/com.svermeulen.extenject@8495d61ceb/Usage --search-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/[email protected]/Runtime/VisualScripting.Flow/Dependencies/NCalc --search-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/[email protected] --search-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/[email protected]/Runtime/AOT --search-directory=D:/Program Files/Unity/Hub/Editor/2022.2.3f1/Editor/Data/MonoBleedingEdge/lib/mono/unityaot-win32 --search-directory=D:/Program Files/Unity/Hub/Editor/2022.2.3f1/Editor/Data/MonoBleedingEdge/lib/mono/unityaot-win32/Facades --out=Library/Bee/artifacts/WinPlayerBuildProgram/ManagedStripped --include-link-xml=D:/documents/dev/tests/buildissue/Test Build Issue/Temp/StagingArea/Data/Managed\MethodsToPreserve.xml --include-link-xml=D:/documents/dev/tests/buildissue/Test Build Issue/Temp/StagingArea/Data/Managed\TypesInScenes.xml --include-link-xml=D:/documents/dev/tests/buildissue/Test Build Issue/Temp/StagingArea/Data/Managed\SerializedTypes.xml --include-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/Bee/PlayerScriptAssemblies --include-directory=D:/Program Files/Unity/Hub/Editor/2022.2.3f1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/Variations/il2cpp/Managed --include-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/com.svermeulen.extenject@8495d61ceb/Usage --include-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/[email protected]/Runtime/VisualScripting.Flow/Dependencies/NCalc --include-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/[email protected] --include-directory=D:/documents/dev/tests/buildissue/Test Build Issue/Library/PackageCache/[email protected]/Runtime/AOT --include-directory=D:/Program Files/Unity/Hub/Editor/2022.2.3f1/Editor/Data/MonoBleedingEdge/lib/mono/unityaot-win32 --include-directory=D:/Program Files/Unity/Hub/Editor/2022.2.3f1/Editor/Data/MonoBleedingEdge/lib/mono/unityaot-win32/Facades --profiler-report --profiler-output-file=D:/documents/dev/tests/buildissue/Test Build Issue/Library/Bee/artifacts/unitylinker_dwek.traceevents --dotnetprofile=unityaot-win32 --dotnetruntime=Il2Cpp --platform=WindowsDesktop --use-editor-options --engine-modules-asset-file=D:/Program Files/Unity/Hub/Editor/2022.2.3f1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/modules.asset --editor-data-file=D:/documents/dev/tests/buildissue/Test Build Issue/Temp/StagingArea/Data/Managed/EditorToUnityLinkerData.json --include-unity-root-assembly=D:/documents/dev/tests/buildissue/Test Build Issue/Library/Bee/PlayerScriptAssemblies/Assembly-CSharp.dll --include-unity-root-assembly=D:/documents/dev/tests/buildissue/Test Build Issue/Library/Bee/PlayerScriptAssemblies/Unity.RenderPipelines.Core.Runtime.dll --include-unity-root-assembly=D:/documents/dev/tests/buildissue/Test Build Issue/Library/Bee/PlayerScriptAssemblies/Unity.RenderPipelines.Universal.Runtime.dll --include-unity-root-assembly=D:/documents/dev/tests/buildissue/Test Build Issue/Library/Bee/PlayerScriptAssemblies/Game.dll --print-command-line --enable-analytics
Fatal error in Unity CIL Linker
Mono.Linker.LinkerFatalErrorException: .\Library\PackageCache\com.svermeulen.extenject@8495d61ceb\Editor\TestFramework\SceneTestFixture.cs(90,13): error IL1005: Zenject.SceneTestFixture.SetUp(): Error processing method 'Zenject.SceneTestFixture.SetUp()' in assembly 'Zenject-TestFramework.dll'
---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'nunit.framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null'
at Unity.IL2CPP.Common.MissingMethodStubber.GetTypeModule(TypeReference type, IEnumerable`1 assemblies)
at Unity.Linker.Steps.AddUnresolvedStubsStep.MarkAssemblyOfType(UnityLinkContext context, TypeReference type)
at Unity.Linker.Steps.Marking.UnresolvedStubMarking.HandleUnresolvedType(TypeReference reference)
at Unity.Linker.Steps.UnityMarkStep.HandleUnresolvedType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.MarkCustomAttributes(ICustomAttributeProvider provider, DependencyInfo& reason, IMemberDefinition sourceLocationMember)
at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method, DependencyInfo& reason)
at Unity.Linker.Steps.UnityMarkStep.ProcessMethod(MethodDefinition method, DependencyInfo& reason)
at Mono.Linker.Steps.MarkStep.ProcessQueue()
--- End of inner exception stack trace ---
at Mono.Linker.Steps.MarkStep.ProcessQueue()
at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
at Mono.Linker.Steps.MarkStep.Process()
at Unity.Linker.Steps.UnityMarkStep.Process(LinkContext context)
at Unity.Linker.UnityPipeline.ProcessStep(LinkContext context, IStep step)
at Mono.Linker.Pipeline.Process(LinkContext context)
at Unity.Linker.UnityDriver.UnityRun(UnityLinkContext context, UnityPipeline p, LinkRequest linkerOptions, TinyProfiler2 tinyProfiler, ILogger customLogger)
at Unity.Linker.UnityDriver.RunDriverWithoutErrorHandling(TinyProfiler2 tinyProfiler, ILogger customLogger)
at Unity.Linker.UnityDriver.RunDriverWithoutErrorHandling()
at Unity.Linker.UnityDriver.RunDriver()
To Reproduce Download the attached project and build OR :
- Create a project
- Add an assembly for the game scripts with one script
- Add a test assembly (play mode) with a SceneTestFixture. The test assembly should reference the game assembly.
Extenject and Unity info (please complete the following information):
- Zenject version: 9.3.1
- Unity version: 2022.2.2f1 or 2022.2.3f1
- Project's scripting backend : Mono with stripping or IL2CPP
Additional context The issue disappear when stripping is disabled. The error occure with any stripping level.
Workaround I forked the repo and changed TestFramework asmdef to only build on editor : https://github.com/MatthieuG9/Extenject/blob/FixAssemblies/UnityProject/Assets/Plugins/Zenject/Source/Editor/TestFramework/Zenject-TestFramework.asmdef