如何强制应用程序使用.NET 3.5或更高版本?

时间:2010-10-17 11:47:26

标签: .net .net-3.5 .net-4.0 clr

我们的应用程序是使用VS 2008构建的,使用Linq并将Target Framework设置为.NET Framework3.5。

当机器上只安装了.NET 3.5或4时,它可以正常工作。

但是,在安装了.NET 2(或3.0)和.NET 4的计算机上,应用程序加载了.NET 2,并在访问Linq时崩溃,因为它查找.NET 3.5库。 / p>

在app.config中使用标签似乎没有帮助,因为它指定了CLR版本,在.NET 3.5的情况下是2。

请注意,我们的安装会验证是否已安装.NET 3.5或更高版本。

有没有办法告诉应用程序加载:

  • 找到的最高CLR ,或
  • CLR 4 如果已安装, CLR 2 如果未安装CLR 4,或
  • CLR 2 如果安装了.NET 3.5, CLR 4 如果未安装.NET 3.5

(请注意,the Community Content section of the Element documentation

中仍未回答类似问题

4 个答案:

答案 0 :(得分:14)

形成这个问题让我得到答案。如the Element documentation中所述,

  

当运行时的多个版本   支持,第一个元素   应指定最优先的   运行时的版本,以及最后一个   element应指定最少   首选版本。

所以实现第二个选项的方法(“如果安装了CLR 4,而CLR 2未安装CLR 4”)将颠倒app.config中元素的顺序:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

这样,如果安装了.NET 4,它将被加载,如果没有,将加载早期版本。

答案 1 :(得分:0)

另一个有用的链接是MSDN上的this page。如果您只想定位客户端配置文件或需要完整配置文件,则会显示app.config中所需的所有值。

答案 2 :(得分:0)

.NET Framework 3.0和3.5版使用CLR版本2.0.50727。

答案 3 :(得分:-1)

如果您有一个非托管EXE调用.NET DLL,您还需要创建一个foo.exe.config文件,其中包含上述<startup>...块。