Как я могу вынудить Visual Studio 2010 использовать MSBuild 3.5 вместо новых 4.0?
Я думаю, что вы не можете изменить версию MSBuild, используемую в Visual Studio, без грязного хака.
Версия задач, целей и инструментов, используемых MSBuild, определяется атрибутом ToolsVersion в файле проекта.
Проблема: Если вы измените ToolsVersion вручную на 3.5 в файле проекта, Visual Studio 2010 автоматически обновит ToolsVersion файла проекта до 4. 0
Решение заключается в том, чтобы установить ToolsVersion проекта на 3.6 (или на 4.0, если вы действительно хотите переопределить MSBuild 4.0), а затем в реестре создать следующий ключ :
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.6
MSBuildToolsPath
NET Framework 3.5 Install Path
(C:\Windows\Microsoft.NET\Framework\v3.5)На машине, где ToolsVersion неизвестна, будет использоваться ToolsVersion по умолчанию.
Дополнительная информация о пользовательском определении набора инструментов.
В диалоговом окне свойств проекта можно настроить таргетинг на разные версии среды выполнения:
альтернативный текст http://img14.imageshack.us/img14/3051/ vstargetframework.png
Не уверен, что изменение правил сборки для использования MsBuild 3.5 для целей C # / VB.NET - хорошая идея.
(В приведенном ниже изменении нет необходимости. Использование целевого файла .NET 4 не вызывает никаких проблем.) Редактировать Попробуйте открыть проект C # с помощью текстового редактора и измените эту строку:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
на это:
<Import Project="C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets" />
Зачем вам это? Есть ли что-нибудь, поддерживающее 3.5, а 4.0 - нет?
Если вас действительно беспокоит то, что когда код извлекается на машину, на которой не установлен .NET 4, вы можете использовать MSBuild 3.5 для сборки проектов (csproj). Вам необходимо создать файл решения для MSBuild 3.5, поскольку он не принимает sln-файл VS2010.
Когда MSBuild встречает ToolsVersion = "4.0", он обрабатывает его как ToolsVersion = "3.5", а затем все продолжает работать.
В моем проекте с открытым исходным кодом #SNMP используются такие приемы, поэтому исходный код может быть построен на .NET 4, .NET 3.5 и Mono.