我们的应用程序是使用.NET 3.5上的WinForms构建的
这是在Windows XP上专门测试的,虽然我不确定它是否与操作系统有关。
每当我在仅使用.NET 4的计算机上运行它时,它都会崩溃,说它无法找到版本为3.5的.NET程序集。
我想知道为什么这不会自动发生。例如,某些第三方库安装某种策略,即安装较新版本时,即使您的应用程序是针对旧版本编译的,也会使用它。
更新:确切的错误消息是:
"无法找到运行此应用程序的运行时版本"。
我的问题是:
答案 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版本将用作回退。如果全部失败,则会显示消息“无法找到运行此应用程序的运行时版本”。