1

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

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

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

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

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

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

我的问题是:

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

3 回答 3

3

一般来说,情况应该是这样:

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

向后兼容性意味着为特定平台版本开发的应用程序将在该平台的更高版本上运行。.NET Framework 试图最大化向后兼容性:为 .NET Framework 的一个版本编写的源代码应该在 .NET Framework 的更高版本上编译,在 .NET Framework 的一个版本上运行的二进制文件在更高版本上的行为应该相同.NET 框架的。

...

.NET Framework 4 向后兼容使用 .NET Framework 版本 1.1、2.0、3.0 和 3.5 构建的应用程序。换句话说,使用以前版本的 .NET Framework 构建的应用程序和组件将在 .NET Framework 4 上运行。

建议:

1)阅读这些链接:

2)看看你是否可以用最小的 .Net 3.5 Winforms 应用程序重现问题

3) 剪切/粘贴确切的错误消息和任何相关代码(例如,来自您的独立应用程序)

4) 如果一切都失败了,请考虑添加<startup useLegacyV2RuntimeActivationPolicy="true" >到您的 CLR 启动配置中。我建议将此作为临时解决方法:

于 2012-05-17T05:51:58.540 回答
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 版本将用作后备。如果全部失败,您将收到消息“无法找到运行此应用程序的运行时版本”。

于 2012-05-17T08:29:58.050 回答
1

.NET 4.0 引入了新的 CLR。所以基本上拥有 4.0 对运行 3.5 应用程序没有多大帮助。 这里已经提到过

于 2012-05-17T05:59:26.243 回答