Подтвердить что ты не робот

Что это значит для целевой среды, и как я могу максимизировать совместимость?

Приветствуем всех,

Это смутило меня с тех пор, как я начал писать код на С#. Моя цель - создать сборку, которая будет работать на самой последней платформе .NET, которую пользователь имеет, что бы это ни было. Я не хочу, чтобы .NET 4 был установлен, но я хочу использовать его, если у пользователя есть это, и что еще более важно, я хочу, чтобы он по-прежнему работал, если у пользователя есть только .NET 4 и ничего ниже. Я начинаю подозревать, что это даже невозможно.

Я не понимаю, что я выбираю, когда меняю "Target Framework" в Visual Studio. Означает ли это, что "будет совместимо с этой версией и выше"? Или "будет совместим только с этой версией"? Кажется, что последний до сих пор; мои тесты на виртуальных машинах показывают, что целевые сборки .NET 4 терпят неудачу без .NET 4, а целевые сборки .NET 3.5 терпят неудачу без .NET 3.5. Нет ли способа установить это, чтобы я мог достичь максимальной совместимости?

ОБНОВЛЕНИЕ: Чтобы уточнить, у меня есть программа, которая нацелена на .NET 2. Плакаты здесь, похоже, указывают на то, что они должны загружаться с помощью .NET 4. Но в среде с .NET 4 и ничего перед ней не удается нагрузки.

UPDATE2: Хорошо, понял, но это гораздо сложнее, чем кажется, что плакаты здесь. Я открываю другой вопрос для обсуждения тонкостей, но короткая версия - вам нужен app.config с <supportedRuntime version="v4.0" /> в ней, если вы хотите запускать сборки .NET.NET на .NET 4. Они не будут без него.

4b9b3361

Ответ 1

Структуры предназначены для обратной совместимости; если у вас есть программа, написанная на .NET 2.0, вы можете запустить ее в среде выполнения 4.0, потому что ни одна из фреймворков никогда не удаляет функциональные возможности предыдущей версии (поэтому у нас все еще есть не общие коллекции, такие как ArrayList, хотя они устарели в пользу общих коллекций). Однако обратное не обязательно верно; приложение 4.0 не гарантируется в версии 2.0, поскольку оно МОЖЕТ использовать новые функции новой среды выполнения, которые недоступны в предыдущих версиях. В любом случае, если вы хотите, чтобы ваше приложение пыталось запустить в версиях исполнения, оно специально не предназначено, вы должны указать это в app.config с помощью элементов SupportedRuntime.

Чтобы ответить на ваш конкретный вопрос, вы можете сделать то, что хотите, со следующей базовой процедурой:

  • Разработайте приложение, чтобы настроить рамочную версию EARLIEST, которую вы хотите поддерживать. Это отключит доступ к более новым функциям более поздних версий (например, Linq в 3.5 и динамическому набору текста в версии 4.0), гарантируя, что ваше приложение не будет требовать каких-либо функций, которые не могут быть предоставлены ни одной из поддерживаемых сред выполнения.

  • Укажите рамки, приемлемые для вашего приложения, используя элемент SupportedRuntime в файле app.config. Это будет указывать на собственный код, который инициализирует среду выполнения, в которой будет выполняться ваше приложение, если оно не может найти целевую версию, любое из других допустимо. Я считаю, что поведение состоит в том, чтобы сначала искать целевую структуру, и если она недоступна, она должна использовать новейшую поддерживаемую среду выполнения.

Ответ 2

.NET обратная совместимость, это означает, что если вы выберите .NET Framework 2.0 в качестве целевой среды, она будет работать на установленных версиях 2.0, 3.0, 3.5 и 4.0. Но если вы выберите вариант версии 4.0 в качестве целевой среды, он будет работать только в том случае, если установлена ​​версия 4.0.

Ответ 3

Я считаю, что это должна быть любая версия, которую вы выбираете и вверх. Поэтому, если вы настроите целевую среду 2.0, она должна работать, если у клиента установлены версии 2.0, 3.0, 3.5 или 4.0.

Вы также выбираете языковые функции, когда выбираете это, поэтому я не знаю, как вы могли бы использовать функции фрейма 4.0 с использованием платформы таргетинга приложений 2.0. Даже динамическая загрузка сборок не работает, попробуйте загрузить dll, скомпилированную в 4.0 из приложения 2.0, это не позволит вам.

Ответ 4

Вот как работает таргетинг: если вы нацеливаете .NET 3.5, он не будет работать, если у пользователя нет .NET 3.5. Он будет работать, если у пользователя есть более высокая версия.

Для максимальной совместимости выберите .NET 2.0, он будет работать даже на .NET 3.5, 4.0 и т.д.

Однако вы можете потерять новые функции .NET, такие как LINQ и т.д.

http://msdn.microsoft.com/en-us/library/bb398197(VS.100).aspx

Могу ли я настроить таргетинг .NET Framework 2.0 на VisualStudio 2010?