Search Issue Tracker
Fixed in 2019.3.X
Script compilation pipeline doesn't warn if asmdef is named the same as a native plugin in the project, causing mayhem
Steps to reproduce:
1. Download "case 1143057.zip"
2. Zip will contain two projects one with Custom Package with .dll (TestDLL - KO) another project has the same package moved to asset folder (TestDLL - OK)
3. Open "TestDLL - KO" project
4. Switch platform to UWP and build project
Results: Build fails with a custom package. The build is successful when the custom package is move to Assets folder.
Reproduced with: 2019.2.0a11, 2019.1.0f1, 2018.3.12f
- reproducible with IL2CPP and .NET backends
- not reproducible when building Standalone (mono/IL2CPP)
UnityException: Failed to run reference rewriter with command "--target=Temp\StagingArea\Data\Managed\Assembly-CSharp.dll" "--target=Temp\StagingArea\Data\Managed\UnityEngine.Timeline.dll"
Catastrophic failure while running rrw: System.BadImageFormatException: Format of the executable (.exe) or library (.dll) is invalid.
at Mono.Cecil.PE.ImageReader.ReadOptionalHeaders(UInt16& subsystem, UInt16& dll_characteristics) in C:\buildslave\cecil\build\Mono.Cecil.PE\ImageReader.cs:line 186
at Mono.Cecil.PE.ImageReader.ReadImage() in C:\buildslave\cecil\build\Mono.Cecil.PE\ImageReader.cs:line 86
at Mono.Cecil.PE.ImageReader.ReadImage(Disposable`1 stream, String file_name) in C:\buildslave\cecil\build\Mono.Cecil.PE\ImageReader.cs:line 754
at Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters) in C:\buildslave\cecil\build\Mono.Cecil\ModuleDefinition.cs:line 1097
at Unity.SearchPathAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters) in C:\buildslave\unity\build\Tools\Unity.NuGetPackageResolver\SearchPathAssemblyResolver.cs:line 52
at Unity.ReferenceRewriter.RewriteAssemblyManifest.RewriteAssemblyReference(AssemblyNameReference reference) in C:\buildslave\unity\build\Tools\rrw\RewriteAssemblyManifest.cs:line 55
at Unity.ReferenceRewriter.RewriteAssemblyManifest.Run() in C:\buildslave\unity\build\Tools\rrw\RewriteAssemblyManifest.cs:line 34
at Unity.ReferenceRewriter.RewriteOperation.Execute(RewriteContext context) in C:\buildslave\unity\build\Tools\rrw\RewriteOperation.cs:line 24
at Unity.ReferenceRewriter.Program.Main(String args) in C:\buildslave\unity\build\Tools\rrw\Program.cs:line 106
May 11, 2019 01:47
Adam, that was indeed the issue on this project as well. On Android and iOS, native plugins don't have .dll file extension, so this conflict never comes up.
Apr 26, 2019 02:53
I figured out the cause of this, at least in my project. My native DLL has a thin managed C# wrapper around it that is built into an assembly via an assembly definition (.asmdef) file. Without thinking about it, I had used the same name for both the assembly and the native DLL. On Android and iOS that seems to work but in a UWP build it causes the BadImageFormatException. That's probably because that part of the build process is looking for the assembly DLL but unfortunately finds the like-named native DLL instead. The solution for me was to just rename the assembly and now all is well. I hope that works for the OP too.
Apr 24, 2019 19:06
I see this in Unity 2018.3.13f1.
Apr 24, 2019 19:05
Me too. I have several native DLLs in my project and I hit the same System.BadImageFormatException from the reference rewriter. Why would RRW even be trying to process native DLLs? I suspect that's the issue. Probably the Unity build process shouldn't run RRW on native DLLs at all.
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
- Long Prefab save times when using Unity 2022.2 and higher
- Console displays error "UnityException: Creating asset at path Assets/Scenes/ .scenetemplate failed." during scene template saving
- "Development Build" watermark is shown in non-development UWP release builds
- Console errors appear when the Inspector is set to Debug and a GameObject is selected
- A script public variable value is not used when set in the Inspector window
Resolution Note (fix version 2019.3):
This is a bug in the package, not Unity. The package has an .asmdef file that makes C# code to be compiled into "HFAsyncTexture.dll", and it also has a native DLL with the exact same name. This causes a conflict.