Cannot open include file: 'metahost.h': No such file or directory

You might upgrade your Visual Studio Project to VS 2017 and you might get errors like:

1>c:\memspect\vsassert\pch.h(20): fatal error C1083: Cannot open include file: 'metahost.h': No such file or directory

On  machine with an older version of Visual Studio, I found metahost.h at:

c:\Program Files (x86)\Windows Kits\8.1\Include\um\metahost.h

Looking at the file, I see that there are definitions of many CLR interfaces for using native code with .Net, like ICLRMetaHost (See .Net Unmanaged API Reference)

I found the file on the VS 2017 machine at:

C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Include\um

Apparently it used to be part of the Windows 8.1 SDK, but is now in the .Net SDK. Seems like a reasonable change, but now I understand why it breaks backward compatibility.

Check to see if you have a version of the .Net SDK with metahost.h  installed. If not, run the Visual Studio installer to install a .Net Framework SDK version.

On my machine the installer is "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe"

Choose to modify your installation, then go to the Individual Components page. There are a whole bunch of choice for .Net:

clip_image002

Then you can go to the Project->Properties->Configuration Properties->C/C++->General/Additional Include Directories, and paste in the path to the new file.

clip_image004

Of course another way to fix this problem is to copy the MetaHost.h file to a location already on the Include search path, such as in your project’s directory.

Indeed, I’ve used MetaHost in several samples for starting the CLR using .Net from C++, and profiling CLR performance. See this link