Quick answer (for the impatient)
Run sfc /scannow from an admin cmd, then reinstall all Visual C++ redistributables from Microsoft's official page. If still broken, delete the conflicting side-by-side assembly in C:\Windows\WinSxS\ using DISM.
What's actually happening here
This error — STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFER (0xC015001C) — means the Windows side-by-side (SxS) assembly cache found two manifest files that claim to be the same assembly (same name, public key token, architecture, and version) but their contents are different. Windows doesn't know which one to trust, so it bails on loading your application.
This typically happens after a botched Visual C++ redistributable install, a failed Windows update that partially updated a CRT assembly, or a third-party installer that dropped a modified manifest into WinSxS. I've seen it most with older apps that bundle their own CRT — like a 2012 game trying to load the 2010 runtime — and the system's copy doesn't match what the app expects.
The key point: this isn't a random corruption. It's a signature mismatch between two manifest files that should be byte-identical. Windows is doing exactly what it should — refusing to load an assembly it can't verify.
How to fix it
- Run System File Checker — Open an admin Command Prompt and run
sfc /scannow. Let it finish and reboot. This often catches manifest mismatches caused by partial file corruption. If it finds and fixes files, test your app before moving on. - Reinstall all Visual C++ redistributables — Go to Microsoft's VC++ page and download the latest x64 and x86 all-in-one package. Then manually grab each old version from 2005 through 2019. Install them in order from oldest to newest. The critical missing piece is usually the 2010 or 2012 runtime — those get trampled by other installers.
- Use DISM to cleanup the conflict — If step 2 doesn't fix it, we need to find the specific assembly. Run
dism /online /get-currenteditions— doesn't help directly, but run this instead:dism /online /cleanup-image /restorehealth. Wait for it to finish. Then check Windows Update logs for any failed SxS-related updates. - Manual manifest replacement — Last resort. Open an admin PowerShell and run
Get-ChildItem -Path 'C:\Windows\WinSxS\' -Recurse -Filter '*.manifest' | Where-Object { $_.Length -gt 100000 }to find large manifests. Look for ones with duplicate names. Compare their hashes withGet-FileHash. Delete the offending file only if you're certain it's the wrong one — back it up first. I've had to do this once for a machine that got two different versions ofMicrosoft.VC80.CRT.manifestfrom different installer sources.
If the main fix doesn't work
Sometimes the problem is not in WinSxS at all — it's in the application's own folder. The app ships with a private manifest that conflicts with the global one. Check the app's install directory for any .manifest files. If you find one, rename it to .old and test. I've seen AutoCAD and older Adobe apps do this.
Another alternative: use Process Monitor (procmon) to filter for CreateFile operations on manifest file paths. Set a filter for Path contains .manifest and Result is NAME NOT FOUND. This will show you exactly which assembly Windows is struggling with. Then you can target that specific version for repair.
Preventing this from happening again
Don't let installers dump custom CRT files into WinSxS. That's the root cause 9 times out of 10. When you install a game or enterprise app that prompts to install VC++ redistributables, let it use the system version — never accept a bundled copy from 2010 if you already have 2015. If an installer insists on downgrading a CRT, cancel the install and find a standalone patch. The Windows SxS store is designed to handle multiple side-by-side versions, but only if each manifests declares a unique identity. When two installers write the same identity with different contents — that's when you get 0xC015001C.
One more thing: if you're deploying apps to multiple machines, run the official VC++ redistributable installer silently with
/quiet /norestartduring your build. Never script a manual copy ofmsvcr*.dll— that's what causes these identity collisions.