.NET Framework 4的向后兼容性

wum*_*nqi 18 .net wpf .net-4.0

我们在.net framework 3.5上构建了WPF应用程序.

一些测试人员发现他们是否卸载了.net framework 3.5,但安装了.net framework 4.0,我们的APP无法自行启动.

这意味着.net框架4.0不包括所有3.5个库,用户必须安装.net 3.5,即使它们有4.0?

我在这里看到的是Microsoft列出的一些迁移问题 http://msdn.microsoft.com/en-us/library/ee941656.aspx#windows_presentation_foundation_wpf

它们都是破坏性的变化,以至于后向兼容性被破坏了吗?

谢谢

Fox*_*ire 20

.Net 3.5/2.0应用程序不会自动在.Net 4.0运行时上运行.您必须明确为您的应用程序指定它应该在您的App.config中运行.Net 4.0,方法是添加:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" /> 
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如果您有第三方组件,您还必须将它们标记为准备好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>
Run Code Online (Sandbox Code Playgroud)

  • 我严重怀疑`<bindingRedirect>`是否合适.这些第三方程序集将拥有自己的[AssemblyVersion],它只会偶然匹配.NET版本.`<supportedRuntime>`足以说服mscoree.dll加载4.0 CLR. (4认同)

Sam*_*der 8

不同的版本并排运行,所以是的,即使他们已经安装了4.0,他们也需要安装3.5.但它们不会互相干扰,所以你的程序将继续使用3.5,除非你把它重新编译到目标4.0(或配置它使用4.0 - 见下面的编辑).

正如在这个问题中指出的那样,微软对此有一些指导:

除了为提高安全性,标准合规性,正确性,可靠性和性能而进行的一些更改之外,.NET Framework 4与使用早期.NET Framework版本构建的应用程序高度兼容.

.NET Framework 4不会自动使用其公共语言运行库版本来运行使用早期版本的.NET Framework构建的应用程序.要使用.NET Framework 4运行较旧的应用程序,必须使用Visual Studio中项目属性中指定的目标.NET Framework版本编译应用程序,或者可以使用应用程序配置文件中的<supportedRuntime>Element指定支持的运行时.

您可以将.NET 3.5和.NET 4.0彼此并排安装.Visual Studio 2010还包括针对.NET 3.5的改进的目标支持.ScottGu的博客更详细地讨论了这一点.

编辑:正如已经指出的,你可以修改你的应用程序的配置,告诉它如果你想要使用4.0运行时.根据您应用程序使用的框架的位数,这可能会也可能不会正常.最安全的是安装3.5,但并不是绝对必要,尽管你必须对配置进行更改才能使其正常工作.


wum*_*nqi 5

谢谢大家,谢谢Foxfire,你的方法有效.

我想分享一个棘手的问题是节点的顺序.

当我在下面设置它时,它适用于3.5和4.0.

<startup>
    <supportedRuntime version="v4.0" />
    <supportedRuntime version="v2.0.50727"/>
</startup>
Run Code Online (Sandbox Code Playgroud)

如果我改变顺序,APP将在OS上崩溃只安装4.0.

<startup>
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0" />
</startup>
Run Code Online (Sandbox Code Playgroud)