Manifests

Up to VS2005 Beta2, one could largely ignore Microsoft's.manifest and what it implied. However, with the arrival of VS2005 RC1 and VS2005 RTM, using /MANIFEST:NO became problematic. Anything that links to the Microsoft DLLs (the RTL, MFC, ATL) must use a manifest, or the DLL's DllMain() will not be loaded into the process's memory. The use of manifests is now an issue because 3rd-party developers submit plug-ins without manifests, preventing their use in debug builds.

The .manifest files can be embedded into the binaries, or they can be left external. We chose to embed them for convenience. If you examine one of the Max binaries, you would see a RT_MANIFEST resource file, which contains the .manifest data. A .manifest file looks like this:

<?xmlversion="1.0" encoding="UTF-8" standalone="yes"?>
<assemblyxmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <dependency>
        <dependentAssembly>
            < assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
            </ assemblyIdentity>
        </dependentAssembly>
    </dependency>
</assembly>

This code lists the dependencies of the binaries, but in a more detailed way than just saying "msvcrt80.dll".

Linking against the manifest is only half of the story: the other half involves finding the binary referenced by the manifest. When you start 3ds Max on a computer which does not have the Microsoft RTLs installed, you do not get the typical "xxxxx.DLL not found". Rather you see a message indicating that the application was not configured properly and that re-installing may solve the problem.

You do not need to install Microsoft's RTL if you use the same one as 3ds Max, and doing so will not cause problems. With the proper use of manifests, you cannot corrupt the 3ds Max installation by installing your own versions of the DLLs.