After migrating my entire code base from VS2008 to 2010 (via automatic solution upgrading) and dealing with the Windows SDK path issue I discovered that every time I change something in my code, it produces a link error the first time around. Linking again creates the exe as normal. Oddly enough I'm unable to find a single occurrence of this error on the web:
error 10100ba: The manifest is missing the definition identity. .... XXX.exe.embed.manifest 1
I've searched by error description and error code.
This isn't a showstopper, but it's definitely annoying as I have to press Ctrl+Shift+B again after a build in order to finish linking. The error seems to be 100% consistent.
Can anyone hazard a guess as to what I could do to get rid of this?
That it works on the second build suggests a build order issue - a step of the build is expecting the output of another step to be available, but it's not - because it's built after the step that's complaining.
XXX.exe.embed.manifest is IIRC the intermediate manifest file which is later embedded as a resource in the exe.
If you look in project options, you can choose to generate the manifest either with "manifest tool" or with the linker. My guess is that you currently have it set so that the manifest tool generates the intermediate manifest file (.embed.manifest) and the linker embeds it, but the manifest tool build step is run after the linker step. If so, you just need to change "Generate Manifest" in the Linker//Manifest section of the project properties.
Quite why this is needed is beyond me - maybe the order the manifest tool and linker are used changed between versions? Possibly a 'fix' for the fact that in earlier versions of msvc the default project setup would embed the manifest on every build, breaking incremental linking.
That makes sense and I kind of expected it to be something like this. On second look, as it turns out the solution is to do something that I didn't try before: disable linker manifest generation and only enable the manifest tool!