Компиляция проекта .NET 3.5 с использованием компилятора .NET 4.0

У меня есть решение, которое содержит несколько проектов. Один из тестовых проектов использует .NET 4.0 из-за зависимости. Готовый к развертыванию проект, который я хочу построить, ориентирован на компилятор .NET 3.5. Наш текущий сценарий сборки недостаточно детализирован, чтобы ориентироваться на разные компиляторы .NET для каждого проекта. Обычно я могу использовать только один компилятор для каждого проекта в решении.

Достаточно ли умен компилятора .NET 4.0 для компиляции кода 3.5?

Структура решения

  • Project 1 .NET 3.5 (с возможностью развертывания)
  • Project 2 .NET 4.0 (используется для тестирования в автоматизированном цикле сборки)

Примечание. Я не могу просто игнорировать Проект 2, потому что наш автоматизированный сервер сборки запускает модульные тесты в проекте 2. Все тесты должны пройти, прежде чем сборка будет успешной.

Редактировать:

Я не компилирую этот код в Visual Studio. У нас есть собственный сценарий сборки, который запускается вне Visual Studio. Достаточно умен, чтобы использовать 1 компилятор .NET. Он использует этот компилятор для компиляции всех проектов в данном решении. Сценарию сборки не важно, определены ли проекты для компиляции с версией 3.5 или 4.0. Вместо этого он компилирует их с помощью определенного компилятора.

Проект 1 не ссылается на проект 2. Проект 2 - это проект, содержащий модульные тесты. Наш автоматизированный инструмент сборки компилирует проект 2 только для выполнения тестов.


person sgmeyer    schedule 27.10.2010    source источник
comment
VS2010 не имеет возможности использовать компилятор, отличный от 4.0, даже если вы нацелены на более ранние версии .net.   -  person Hans Passant    schedule 28.10.2010
comment
+1 Это полезно знать. Я решил, что он использовал соответствующий компилятор в зависимости от цели. Спасибо за информацию.   -  person sgmeyer    schedule 28.10.2010


Ответы (3)


ИЗМЕНИТЬ

Оп пояснил, что вопрос - это комментарии как

Может ли компилятор 4.0 скомпилировать проект версии 3.5

Ответ: да, это очень возможно.

person JaredPar    schedule 27.10.2010
comment
Нет, я имею в виду, что у нас есть сценарий сборки, который компилирует все проекты в решение. Сценарий сборки может быть предназначен только для 1 компилятора .NET. Таким образом, в случае, если он нацелен на компиляцию .NET 4.0 для компиляции каждого проекта в решении. На данный момент сборки не созданы. - person sgmeyer; 27.10.2010
comment
@sgmeyer, я все еще в замешательстве. Вы все компилируете дважды? - person JaredPar; 27.10.2010
comment
нет, я не собираю все дважды. Мой сценарий сборки запускает его один раз. Я спрашиваю, могу ли я скомпилировать проект 3.5 с компилятором 4.0. Не компилировать проект, ссылающийся на сборку 3.5. - person sgmeyer; 27.10.2010
comment
@sgmeyer, тогда ответ - да. Это вполне выполнимо. - person JaredPar; 27.10.2010

Щелкните правой кнопкой мыши свой проект «Project 1» в обозревателе решений. Затем нажмите «Свойства» (горячая клавиша - ALT + Enter). На вкладке приложения есть раскрывающийся список «Целевая платформа». Установите это на 3.5.

Теперь, когда вы компилируете (похоже, вы используете командную строку), используйте MSBuild и не указывайте целевую версию платформы. Просто скомпилируйте файл решения, и каждый проект будет правильно скомпилирован.

person Bob    schedule 27.10.2010
comment
Я не компилирую с Visual Studio. Первая часть для меня ничего не делает. Вместо этого я компилирую сценарий сборки, внешний по отношению к Visual Studio. Это контролируется нашей командой сборки. Мне интересно, возможно ли это без изменения сценария сборки. - person sgmeyer; 27.10.2010
comment
Вы разрабатываете в Visual Studio? Если да, то сделайте то, что я сказал, он обновит ваш файл проекта. Затем используйте MSBuild для компиляции файла решения, он выберет версию фреймворка для сборки каждого проекта на основе их настроек из файла проекта. - person Bob; 27.10.2010
comment
Я разрабатываю VS2010. Он уже нацелен на 3.5. Я могу все отлично скомпилировать в VS. Проблема связана с сервером сборки и скриптами, которые он использует для сборки проектов. Вот почему я хотел знать, будет ли компилятор .NET 4.0 C # компилировать проекты .NET 3.5. - person sgmeyer; 27.10.2010
comment
Технически ни один из компиляторов Microsoft C # не может скомпилировать какой-либо файл проекта .NET (.csproj). Компилятор C # может компилировать файлы исходного кода C # (.cs), и они могут ориентироваться на разные версии платформы .NET для выходного двоичного файла. MSBuild может компилировать файлы проекта (.csproj) и файлы решений (.sln). Итак, ответ - нет. Однако вы можете делать все, что хотите, используя MSBuild и указав целевую платформу в свойствах проекта. - person Bob; 27.10.2010

Вы можете столкнуться с проблемами в зависимости от типов используемых вами библиотек. В частности, у меня были проблемы с пространствами имен / именами классов, которых не было в версии 3.5 и которые были реализованы в версии 4.0.

Если вы делаете что-то эзотерическое, например, компилируете исходный код NHibernate как часть своего решения, вы столкнетесь с проблемами. В противном случае, если вы не входите в какое-либо пространство имен, у вас не должно возникнуть проблем с компиляцией проекта 3.5 в 4.0.

Что плохого в том, чтобы принять ответ Боба? Вы используете индивидуальное решение для сборки (т.е. не Visual Studio)?

person wllmsaccnt    schedule 27.10.2010