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

Обратная совместимость .NET Framework 4

У нас есть приложение WPF Application на .net framework 3.5.

Некоторые тестировщики обнаруживают, что они удаляют .net framework 3.5, но устанавливают .net framework 4.0, наш APP не запускается сам.

Допустим, это означает, что .net framework 4.0 не включает все 3.5 libs, и пользователям приходится устанавливать .net 3.5, хотя они имеют 4.0?

Я вижу здесь некоторые проблемы с миграцией, перечисленные Microsoft http://msdn.microsoft.com/en-us/library/ee941656.aspx#windows_presentation_foundation_wpf

Все ли они нарушают изменения, так что обратная совместимость разрушается?

Спасибо

4b9b3361

Ответ 1

.Net 3.5/2.0 Приложения не автоматически запускаются в среде исполнения .NET 4.0. Вы должны явно указать для своего приложения, что он должен работать на .NET 4.0 в вашем App.config, добавив:

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

Если у вас есть сторонние компоненты, вам также нужно отметить их как готовые к 4.0:

<configuration>
   ...
   <runtime>
      ...
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         ...
         <dependentAssembly>
            <assemblyIdentity name="AssemblyName" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="3.5.0.0-3.5.0.0" newVersion="4.0.0.0"/>
         </dependentAssembly>
         ...
      </assemblyBinding>
      ...
   </runtime>
   ...
</configuration>

Ответ 2

разные версии работают бок о бок, поэтому да, они должны установить 3.5, даже если они уже установили 4.0. Но они не будут мешать друг другу, поэтому ваша программа будет продолжать использовать 3.5, если вы не перекомпилируете ее для целевого 4.0 (или настройте ее на использование 4.0 - см. Ниже).

Как было указано в этом вопросе, у microsoft некоторые рекомендации по этому вопросу

.NET Framework 4 очень совместим с приложениями, которые создаются с более ранними версиями .NET Framework, за исключением некоторых изменений, которые были сделаны для повышения безопасности, соответствия стандартов, правильности, надежности и производительности.

.NET Framework 4 автоматически не использует свою версию среды общего языка для запуска приложений, созданных с более ранними версиями .NET Framework. Чтобы запускать старые приложения с .NET Framework 4, вы должны скомпилировать ваше приложение с целевой версией .NET Framework, указанной в свойствах вашего проекта в Visual Studio, или вы можете указать поддерживаемое время выполнения с помощью <supportedRuntime> Элемент в файле конфигурации приложения.

Вы можете установить .NET 3.5 и .NET 4.0 вместе друг с другом. Visual Studio 2010 также включает улучшенную поддержку таргетинга на .NET 3.5. блог ScottGu об этом подробнее.

EDIT: Как уже указывалось, вы можете изменить конфигурацию своего приложения, чтобы сообщить ему, что если вы хотите использовать среду выполнения 4.0. это может быть или не быть нормально в зависимости от бит используемой вами среды. Безопаснее всего установить 3.5, но это не является абсолютно необходимым, хотя вам нужно внести изменения в свой конфиг, чтобы заставить его работать.

Ответ 3

Спасибо всем, и спасибо Foxfire, ваш метод работает.

И есть одна сложная вещь, которую я хотел бы рассказать - это порядок узлов.

Когда я устанавливаю его так, как показано ниже, он работает как на 3.5, так и на 4.0.

<startup>
    <supportedRuntime version="v4.0" />
    <supportedRuntime version="v2.0.50727"/>
</startup>

И если я изменю порядок, APP выйдет из строя, на ОС будет установлено только 4.0.

<startup>
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0" />
</startup>