2012-05-17 4 views
1

Наше приложение построено с использованием WinForms на .NET 3.5Сбой при запуске приложения в .NET 3.5 на .NET 4

Это был протестирован именно на Windows XP, хотя я не уверен, является ли это OS связаны между собой.

Всякий раз, когда я запускаю его на компьютере только с .NET 4, он сбой, говоря, что он не может найти сборки .NET версии 3.5.

Мне интересно, почему это не происходит автоматически. Например, некоторые сторонние библиотеки устанавливают какую-либо политику, которая, когда установлена ​​более новая версия, будет использоваться, даже если ваше приложение было скомпилировано против более старой версии.

UPDATE: Точное сообщение об ошибке:

«Не удалось найти версию среды выполнения для запуска этого приложения».

Мои вопросы:

  1. Почему это не то же самое с рамками .NET?
  2. Решение состоит в том, чтобы добавить элемент в файл конфигурации? Любые другие решения?
+0

Я думаю, что 3.5 (.net 2) CLR и .net4 CLR работают бок о бок, поэтому вам нужно 3.5 времени исполнения, если вы хотите запускать старые приложения. –

+0

Работает ли он при установке .net 3.5 и .net 4.0? –

+0

@ EmmieGabrielleLewis да, так оно и есть. –

ответ

1

Если на вашем компьютере нет установленного .NET 3.5, для вашего приложения не будет CLR. .NET 4.0 не используется автоматически для вашего приложения из-за потенциальных проблем совместимости. Сначала проверьте, что ваше приложение работает с .NET 4.0, а затем добавьте этот раздел в свой app.config, чтобы сообщить CLR, что он предпочитает использовать .NET 4.0, если он присутствует.

<configuration> 
    <startup> 
     <supportedRuntime version="v4.0.30319"/> 
    </startup> 
</configuration> 

Если .NET 4 нет как Откат версии CLR, против которой ваше приложение был скомпилирован против используется в качестве запасного варианта. Если все не удается, вы получаете сообщение «Невозможно найти версию среды выполнения для запуска этого приложения».

+0

Есть ли недостатки в использовании такой конфигурации? –

+0

Если ваше приложение действительно работает с .net 4.0, то нет недостатков. –

3

В общем, что должно не быть:

http://msdn.microsoft.com/en-us/library/ff602939.aspx

Обратная совместимость означает, что приложение, разработанное для конкретной версии платформы будет работать на более поздние версии что платформы. .NET Framework пытается максимизировать обратную совместимость: Исходный код, написанный для одной версии .NET Framework, должен компиляции в более поздних версиях .NET Framework, а двоичные файлы, которые запускают на одной версии .NET Framework, должны вести себя одинаково на более поздних версиях .NET Framework.

...

В .NET Framework 4 является обратной совместимостью с приложениями, которые были построены с версиями .NET Framework 1.1, 2.0, 3.0, и 3.5. В другие слова, приложения и компоненты, построенные с использованием предыдущих версий .NET Framework, будут работать в .NET Framework 4.

SUGGESTIONS:

1) Читать эти ссылки:

2) Смотрите, если вы можете воспроизвести проблему с минимальным .Net приложения 3,5 Winforms

3) Вырезать/вставить точное сообщение об ошибке, и любой соответствующий код (например, из вашего автономного приложения)

4) В противном случае рассмотрите возможность добавления <startup useLegacyV2RuntimeActivationPolicy="true" > в конфигурацию запуска CLR. Я бы не рекомендовать это как угодно, но временное решение:

+0

@liortal - помимо предоставления нам точного сообщения об ошибке и кода проводки (если возможно), пожалуйста, также сообщите нам ОС, где это происходит. Я предполагаю «Windows 7». Спасибо заранее ... – paulsm4

+0

Добавлено точное сообщение об ошибке. –

+0

У меня также было впечатление того, что вы указали в своем ответе, однако ваш ответ противоречит другим ответам здесь (Алоис Краус). –

1

.NET 4.0 ввести новый CLR. Таким образом, базовая версия 4.0 не очень помогает при запуске 3.5 приложений. It has been already mentioned here

+0

Да, .Net 4.0 имеет новую среду CLR. Но большинство сред, работающих под управлением .Net 4.0 *, должны * быть обратно совместимыми. Здесь что-то не хватает OP ... – paulsm4

+0

Я смущен, должен ли .NET 4 (или CLR 4) поддерживать запуск 3.5 или нет (без явной настройки с курса). –

Смежные вопросы