- Home /
How to resolve "Multiple Precompiled Assemblies" error
Our project is currently attempting to use DOTS and Grpc, but we are running into some conflicts with the dlls. It appears that the com.unity.collections@0.5.1-preview.11
package includes System.Runtime.CompilerServices.Unsafe.dll, which the Grpc plugin also includes, but at a slightly higher version (4.0.4.1 instead of 4.0.4.0). Since there are now 2 dlls of the same name in the project, this results in this error:
PrecompiledAssemblyException: Multiple precompiled assemblies with the same name System.Runtime.CompilerServices.Unsafe.dll included for the current platform. Only one assembly with the same name is allowed per platform.
If I delete the unsafe dll in the Grpc plugin, the error goes away but Grpc throws an exception at runtime because it can't find the correct version of the dll. Grpc references this dll indirectly through the System.Memory.dll, so as far as I can tell, the only way I can change the version of that dll to match is to recompile Grpc and System.Memory. It doesn't look like there's any way to modify the collections package.
Is there a better way to handle conflicting dlls in Unity? Normal C# apps could use bindingRedirects but those don't seem to be supported.
Answer by OMG_Lewis · Feb 10, 2020 at 05:22 PM
I found a workaround for this; I used ILMerge to merge GRPC and all of it's dependencies into one .dll and made the deps internal. This avoids the error, but does mean that I'm essentially shipping multiple copies of the dlls, and may not be a viable option for all libraries.
Being tracked here... https://github.com/grpc/grpc/issues/21908
I filed that issue :) That's actually a slightly different problem; the unity grpc package they have references two different versions of the same .dll and only ships with one of them. Even if that's fixed, it'll still conflict with the .dll that unity ships.
The System.$$anonymous$$emory.dll is beco$$anonymous$$g popular for writing more performant C# code, and right now the way Unity handles the references to it essentially prevents any 3rd party libraries from using it.
The precompiled assemblies issue is really being a very serious problem. Hope Unity finds a quick solution.
Your answer
Follow this Question
Related Questions
Reinstall problems 0 Answers
iOs error message using ez replay plugin 1 Answer
Failed to load dll error 3 Answers
Internal Compiler Error, caused by System.Windows.Forms.dll 1 Answer
Error launching unity player.Failed to load unity dll. 1 Answer