Ориентация на несколько версий .net Framework - PullRequest
4 голосов
/ 04 сентября 2008

Предположим, у меня есть некоторый код, который теоретически скомпилируется с любой версией .net framework. Подумайте «Привет, мир», если хотите.

Если я на самом деле скомпилирую код, я получу исполняемый файл, который работает с одной конкретной версией.

Есть ли способ упорядочить вещи так, чтобы скомпилированный exe просто работал против любой найденной версии? Я сильно подозреваю, что ответ - нет, но я был бы рад оказаться неправым ...


Редактировать: Хорошо, я пойду к подножию нашей лестницы. Я понятия не имел, что более поздние фреймворки с удовольствием запустят exe, скомпилированный в более ранних версиях. Спасибо за все ответы!

Ответы [ 7 ]

6 голосов
/ 04 сентября 2008

Я не уверен, что это правильно, но я попытался бы скомпилировать его для самой низкой версии, более высокие версии должны иметь возможность запускать более низкие версии exe.

3 голосов
/ 04 сентября 2008

Прочтите сообщение ScuttGu о VS Multi-Targeting Support

Одно из больших изменений, которые мы делаем начиная с версии VS 2008 поддержать то, что мы называем «Многоцелевой таргетинг» - это означает, что Visual Studio теперь будет поддерживать ориентация на несколько версий .NET Framework, и разработчики возможность начать использовать в своих интересах новые возможности Visual Studio без необходимости всегда обновлять их существующие проекты и развернуты приложения для использования новой версии библиотека .NET Framework.

Теперь, когда вы открываете существующий проект или создайте новый с VS 2008, вы можно выбрать, какая версия .NET Framework для работы - и IDE обновит свои компиляторы и набор функций, чтобы соответствовать этому. среди другие вещи, это означает, что особенности, элементы управления, проекты, элементы-шаблоны и сборка ссылки, которые не работают с этим версия фреймворка будет скрытый, и когда вы строите свой приложение, которое вы сможете взять скомпилированный вывод и скопировать его на машина, которая имеет только старую версию установленный .NET Framework, и вы будете знать, что приложение будет работа.

Таким образом, вы можете использовать VS2008 для разработки проектов .NET 2.0, которые будут работать как на .NET 2.0, 3.0, так и на 3.5

.
0 голосов
/ 04 сентября 2008

В зависимости от того, какую платформу .NET Framework установил пользователь, существует также новая опция с клиентским профилем, доступная в .NET 3.5 SP1. Это, в основном, позволяет вам загрузить небольшую (277 тыс.) Программу начальной загрузки, которая загружает и устанавливает необходимые файлы (подмножество полной платформы .NET).

Для получения дополнительной информации и общих советов по созданию небольшой установки .NET см. Эту великолепную запись в блоге Скотта Хансельмана .

0 голосов
/ 04 сентября 2008

Ну, AFAIK, все версии .NET (кроме версии 1.x) компилируются в один и тот же байт-код. В случае C # все новые функции являются просто синтаксическим сахаром, который преобразуется в конструкции C # 2.0 при компиляции. Ключевым моментом, когда что-то может пойти не так, является использование специальных библиотек C # 3.0 или 3.5. Они плохо работают с платформой .NET 2.0, поэтому вы не можете их использовать.

Я не могу придумать обходного пути для этого, извините: (

0 голосов
/ 04 сентября 2008

с 2005 и 2008, да (на CLR 2.0)

С 2003 г. нет .. потому что он компилируется до CLR 1.1

Вы можете теоретически написать некоторый код, используя #if (DOTNET35) и т. Д., Чтобы вы не использовали функции, не относящиеся к знаниям компиляторов, а затем запустили нужный компилятор в приложении ... Хотя я ставлю под сомнение полезность этого. 1005 *

0 голосов
/ 04 сентября 2008

Я знаю, @ Джон Бокер правильно, когда дело доходит до библиотек классов .Net. Вы можете скомпилировать библиотеку классов для .Net 1.1, а затем использовать ее в проекте .Net 2.0 или более поздней версии.

Я подозреваю, что то же самое верно и для исполняемых файлов.

0 голосов
/ 04 сентября 2008

Вдоль бокового многоцелевого таргетинга фреймворки обратно совместимы, поэтому что-то скомпилированное в 1.0 будет работать на 1.1 и 2. Что-то, скомпилированное на 1.1, будет работать на 2 ... и т. Д.

...