Компиляция проекта.NET 3.5 с использованием компилятора.NET 4.0
У меня есть решение, которое содержит несколько проектов. Один из тестовых проектов использует.NET 4.0 из-за зависимости. Проект для развертывания, который я хочу построить, нацелен на компилятор.NET 3.5. Наш текущий скрипт сборки недостаточно детализирован, чтобы нацеливаться на разные компиляторы.NET в зависимости от проекта. По сути, я могу использовать только один компилятор для каждого проекта в решении.
Компилятор.NET 4.0 достаточно умен для компиляции кода 3.5?
Структура решения
- Проект 1 .NET 3.5 (развертываемый)
- Проект 2 .NET 4.0 (используется для тестирования в автоматическом цикле сборки)
Примечание: я не могу просто проигнорировать Project 2, потому что наш автоматизированный сервер сборки выполняет модульные тесты в проекте 2. Все тесты должны пройти, прежде чем сборка будет успешной.
Редактировать:
Я не компилирую этот код в Visual Studio. У нас есть собственный скрипт сборки, который запускается вне Visual Studio. Он достаточно умен, чтобы использовать 1 компилятор.NET. Он использует этот компилятор для компиляции всех проектов в данном решении. Сценарий сборки не заботится о том, определены или нет проекты для компиляции с 3.5 или 4.0. Вместо этого он компилирует их с помощью определенного компилятора.
Проект 1 не ссылается на проект 2. Проект 2 - это проект, содержащий юнит-тесты. Наш автоматизированный инструмент сборки компилирует проект 2 только для запуска тестов.
3 ответа
РЕДАКТИРОВАТЬ
Op уточнил вопрос, комментарии как
Может ли компилятор 4.0 скомпилировать проект 3.5
Ответ - да, это очень возможно.
Щелкните правой кнопкой мыши ваш проект "Project 1" в обозревателе решений. Затем нажмите Свойства (горячая клавиша ALT+Enter). Под вкладкой приложения есть раскрывающийся список "Target Framework". Установите это на 3,5.
Теперь, когда вы компилируете (похоже, вы используете командную строку), используйте MSBuild и не указывайте целевую версию фреймворка. Просто скомпилируйте файл решения, и каждый проект будет скомпилирован правильно.
Вы можете столкнуться с проблемами в зависимости от типов библиотек, которые вы используете. В частности, у меня были проблемы с пространствами имен / именами классов, которых не было в 3.5, которые были реализованы в 4.0.
Если вы делаете что-то эзотерическое, например, компиляцию исходного кода NHibernate как части своего решения, вы столкнетесь с проблемами. В противном случае, если вы не наступаете ни на одно пространство имен, у вас не должно возникнуть проблем при компиляции проекта 3.5 в 4.0.
Что не так с ответом Боба? Вы используете нестандартное решение для сборки (т.е. не Visual Studio)?