Today I tried to figure out why one of my Visual Studio Projects failed to embed a Manifest. I had Generate Manifest and Embed Manifest enabled under Linker / Manifest tool, but manifest was not embedded.
Long story short, after 2 hours of configuring, rebuilding, creating, deleting, I had the following state:
– Move project to C: drive, and Linker embeds manifest as expected.
– Move project to D: drive, and manifest is not embedded into exe file.
– Move project to D: drive, and add a dummy resource, and Linker embeds manifest as expected.
– Bonus to all this, Release version worked like a charm, but Debug version did not.
Looking at disk properties revealed, that C: is NTFS drive, but D: is my old FAT32 drive. Then I recalled, that there was one strange option in Visual Studio 2008 Manifest Tool, called ‘Use FAT32 Work-around’. From MSDN documentation:
FAT and FAT32 file systems have up to a two second latency between the time that a file is changed and the time that the file's time stamp is updated. This latency prevents the build process from determining whether or not relevant files are up-to-date.
Yes introduces a two second delay to allow the manifest tool (Mt.exe) to properly embed the manifest on FAT and FAT32 file systems. If you are building a project on a FAT or FAT32 file system, select Yes.
The problem is, that if you open the same properties in Visual Studio 2010, then there is no such option anymore. Option ‘Use FAT32 Work-around’ is removed from Visual Studio 2010. It means that Visual Studio 2010 works only on NTFS. This is not mentioned in System Requirements, but who is using FAT32 anyway?
So currently my workaround is to convert my old drive to NTFS.