在.NET 4上运行.NET 3.5应用程序时崩溃

时间:2012-05-17 05:45:44

标签: c# .net .net-4.0 clr compatibility

我们的应用程序是使用.NET 3.5上的WinForms构建的

这是在Windows XP上专门测试的,虽然我不确定它是否与操作系统有关。

每当我在仅使用.NET 4的计算机上运行它时,它都会崩溃,说它无法找到版本为3.5的.NET程序集。

我想知道为什么这不会自动发生。例如,某些第三方库安装某种策略,即安装较新版本时,即使您的应用程序是针对旧版本编译的,也会使用它。

更新:确切的错误消息是:

"无法找到运行此应用程序的运行时版本"。

我的问题是:

  1. 为什么这与.NET框架不一样?
  2. 解决方法是在配置文件中添加元素?还有其他解决方案吗?

3 个答案:

答案 0 :(得分:3)

一般来说,应该是这样的:

  

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

     

向后兼容性意味着为a开发的应用程序   特定版本的平台将在其更高版本上运行   平台。 .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启动配置中。我会推荐这个,只是一个临时的解决方法:

答案 1 :(得分:1)

.NET 4.0引入了新的CLR。因此基本上使用4.0对运行3.5个应用程序没有多大帮助。 It has been already mentioned here

答案 2 :(得分: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版本将用作回退。如果全部失败,则会显示消息“无法找到运行此应用程序的运行时版本”。