MSBuild 4 будет (должен ...) использовать инструменты 3.5 для создания 3.5 проектов.Тем не менее, похоже, что он не может работать там, где находятся инструменты 3.5 и использует инструменты 4.0.В результате он правильно строит ваш проект 3.5 (со сборками CLR 2.0.50727), но инструмент 4.0 sgen.exe генерирует Ceoimage.Basecamp.XmlSerializers.dll в виде сборки CLR 4.0.30319.
MSBuild использует реестр, чтобы получить путь к инструментам v3.5.Задачи MSBuild, для которых требуются инструменты SDK версии 3.5, вернутся к пути v4.0, если путь к инструментам версии 3.5 не могут быть идентифицированы. Посмотрите на логику, используемую для установки свойства TargetFrameworkSDKToolsDirectory в C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.NETFramework.props, если вы действительно заинтересованы.
Вы можете диагностировать и устранять возможные проблемы с реестром следующим образом:
Установить Process Monitor и настроить фильтр для мониторинга доступа к реестру с помощью msbuild (Класс события: Registry, Имя процесса: msbuild.exe,все типы результатов)
Запустите сборку
Монитор процесса поиска для доступа RegQueryValue, совпадающего с "MSBuild \ ToolsVersions \ 4.0 \ SDK35ToolsPath".Обратите внимание, что это может быть либо "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft", либо "HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft"
Если вы посмотрите на этот ключ в реестре, вы увидите, что это псевдонимыдругое значение реестра, например "$ (Registry: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.1 \ WinSDK-NetFx35Tools-x86 @ InstallationFolder)" Вскоре после этого вы, вероятно, увидите результат "ИМЯ НЕ НАЙДЕНО"поскольку msbuild пытается загрузить значение из указанного ключа.
Должно быть понятно, какие ключи вам нужно добавить / изменить здесь.
Существует несколько возможных причин, по которым значения реестранеправильно.В моем случае проблема с установкой Microsoft SDK v7.1 означала, что разделы реестра были названы неправильно, что было определено как ошибка здесь:
http://connect.microsoft.com/VisualStudio/feedback/details/594338/tfs-2010-build-agent-and-windows-7-1-sdk-targeting-net-3-5-generates-wrong-embedded-resources