Quick answer: Two copies of the same DLL are in the project, usually Newtonsoft.Json.dll bundled by an Asset Store package plus Unity's com.unity.nuget.newtonsoft-json package. Find both, keep the package-managed one, and delete or disable the bundled copy for every platform. Scripts will not compile until it is resolved.

This error blocks compilation entirely, and it tends to appear right after importing an asset or adding a Unity package that depends on JSON. The fix is mechanical once you know where the second copy is.

The exact error

Multiple precompiled assemblies with the same name Newtonsoft.Json.dll included on the current platform. Only one assembly with the same name is allowed per platform. (Assets/Plugins/Newtonsoft.Json.dll)

Newtonsoft.Json is the most common, but the same happens with System.Memory.dll, System.Runtime.CompilerServices.Unsafe.dll, Google.Protobuf.dll and other shared libraries.

Step 1: find every copy

The error names one path; find the other. Search both Assets and the package cache, because Unity packages live outside Assets:

# macOS / Linux
find Assets Library/PackageCache Packages -name "Newtonsoft.Json.dll"

# Windows PowerShell
Get-ChildItem -Recurse -Filter Newtonsoft.Json.dll -Path Assets,Library\PackageCache,Packages

Typical result: one copy in Assets/Plugins or inside an Asset Store package folder, and one in Library/PackageCache/com.unity.nuget.newtonsoft-json@x.y.z. Many Unity packages (Unity Services, Addressables in some versions, Version Control and others) pull in the Newtonsoft package as a dependency, which is why the conflict appears when you install something unrelated.

Step 2: keep one

Unity recompiles as soon as only one copy is included for the current platform.

If both copies are in packages

When two different packages each embed the same DLL, you cannot delete either from the package cache; it is regenerated. Embed the package that should not ship the DLL (copy its folder from Library/PackageCache into Packages/), remove or disable the DLL in that embedded copy, and report it to the package author. Check first whether an update of either package already fixed it.

Version mismatches after the fix

Code written against the deleted copy may expect a different version. If you now see errors such as missing methods or Assembly 'X' has reference to non-existent assembly, the asset was built against an older Newtonsoft version. Update the asset, or pin the Newtonsoft package to a compatible version in Packages/manifest.json.

Builds with IL2CPP

Once it compiles, remember that Newtonsoft.Json uses reflection, and IL2CPP's managed code stripping can remove types it needs at runtime. Unity's package version includes the necessary link settings, which is another reason to keep it rather than a random bundled DLL.

Serialization errors in players’ builds

JSON errors caused by stripping or version mismatches usually appear only in builds, when a save file or server response fails to parse on a player's device. Bugnet's Unity SDK hooks Unity's log stream, so exceptions and errors in a player's build are filed automatically with the last log lines, a screenshot, the device, OS and build version, and identical ones stack into a single issue with a count.

Frequently asked questions

How do I fix “Multiple precompiled assemblies with the same name Newtonsoft.Json.dll”?

Find both copies of the DLL, keep the one from the com.unity.nuget.newtonsoft-json package, and delete or disable the copy under Assets.

Why did this error appear after installing a Unity package?

Many Unity packages depend on the Newtonsoft JSON package. If an asset already shipped its own Newtonsoft.Json.dll, the project now has two.

Can I disable a DLL instead of deleting it?

Yes. Select it, untick every platform in the Plugin Inspector and apply. It stays in the project but is never compiled or included.

Package Manager owns shared libraries. Delete the copies that rode in with assets.