Я столкнулся с той же проблемой, когда целевая библиотека классов 3.5 в VS10 выходит с Target Runtime v4.0 в Reflector и вызывает проблемы при использовании в приложениях, в которых для параметра only selectedRuntime установлено значение v2.0.
В моем случае это было связано с событием после сборки, которое разбирает сборку, делает магию, а затем снова "собирает" ее так:
call "$(DevEnvDir)..\Tools\vsvars32.bat"
ildasm "$(TargetFileName)" /out=myassembly.il /nobar /linenum
magic.exe myassembly.il ilasm myassembly.changed.il
ilasm myassembly.changed.il /DLL /OUTPUT="$(TargetFileName)"
Это прекрасно работает в VS2008, потому что переменная среды path указывает на версию v2.0 платформы. В VS 2010 кажется, что они указывают на версию v4.0, поэтому при обработке IL создается код 4.0.
ilasm.exe не имеет переключателя, который указывает его на сборку для версии v2.0, но существует в определенных версиях для каждой версии фреймворка. Чтобы это исправить, я указал полный путь к инструментам:
call "$(DevEnvDir)..\Tools\vsvars32.bat"
"%WindowsSdkDir%bin\ildasm "$(TargetFileName)" /out=myassembly.il /nobar /linenum
magic.exe myassembly.il ilasm myassembly.changed.il
%FrameworkDir%\v2.0.50727\ilasm myassembly.changed.il /DLL /OUTPUT="$(TargetFileName)"