Компиляция .NET 3.5 проекта с использованием компилятора .NET 4.0
-
26-09-2019 - |
Вопрос
У меня есть решение, содержащее несколько проектов. Один из тестовых проектов использует .NET 4.0 из-за зависимости. Проект развертывания, который я хочу построить, предназначен для компилятора .NET 3.5. Наш текущий сценарий сборки не является гранулированным, чтобы нацелить различные компиляторы .NET на проекте по проекту. В основном я могу использовать только один компилятор для каждого проекта в решении.
Компилятор .NET 4.0 достаточно смарт для компиляции 3.5 кода?
Структура решения
- Проект 1 .NET 3.5 (развертывание)
- Проект 2 .NET 4.0 (используется для тестирования в автоматическом цикле сборки)
ПРИМЕЧАНИЕ. Я не могу просто игнорировать проект 2, потому что наш автоматический сервер сборки запускает тесты модуля в проекте 2. Все тесты должны проходить до успеха по сборке.
Редактировать:
Я не собираю этот код в Visual Studio. У нас есть пользовательский сценарий сборки, который работает наружу на Visual Studio. Это только умно, чтобы использовать 1 .NET Compiler. Он использует этот компилятор для компиляции всех проектов в данном решении. Сценарий сборки не заботится, определены ли проекты, которые будут скомпилированы на 3,5 или 4.0. Вместо этого он компилирует их с определенным компилятором.
Проект 1 не справочный проект 2. Проект 2 - это проект, содержащий модульные тесты. Наш автоматический инструмент сборки компилирует проект 2 только для запуска тестов.
Решение
РЕДАКТИРОВАТЬ
Op уточнил вопрос о комментариях как
Может ли компилятор 4.0 компилятора Complet 3,5 проекта
Ответ да, это очень возможно.
Другие советы
Щелкните правой кнопкой мыши на вашем проекте «Проект 1» в исследовательском исследовании. Следующий клик Свойства (горячая клавиша Alt + Enter). Под вкладкой приложения появляется «целевая структура». Установите это до 3,5.
Теперь, когда вы компилируете (звучит так, как вы используете командную строку) Msbuild. И не указывайте целевую структуру версии. Просто компилируйте файл решения, и каждый проект будет правильно компитен.
Вы можете столкнуться с проблемами в зависимости от типов библиотек, которые вы используете. В частности, у меня были проблемы с именами пространств имен / классов, которые не существовали в 3.5, которые были реализованы в 4.0.
Если вы делаете что-то эзотерическое, как составить исходный код Nhibernate как часть вашего решения, вы столкнетесь с проблемами. В противном случае, если вы не наступаете на любые пространства имен, у вас не должно быть проблем с компиляцией проекта 3.5 до 4.0.
Что не так с ответом Боба? Вы используете пользовательское решение Build (то есть не Visual Studio)?