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

spl*_*tor 14 .net clr .net-4.0 .net-3.5

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

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

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

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

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

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

  • 它找到的最高CLR,或
  • CLR 4(如果已安装)和CLR 2(如果未安装CLR 4)或
  • 如果安装了.NET 3.5,则为CLR 2;如果未安装.NET 3.5,则为CLR 4

(请注意,在Element文档的Community Content部分中仍未回答类似的问题)

spl*_*tor 14

形成这个问题让我得到答案.如元素文档中所述,

当支持多个版本的运行时时,第一个元素应指定最优选的运行时版本,最后一个元素应指定最不喜欢的版本.

因此,实现第二个选项("如果安装了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>
Run Code Online (Sandbox Code Playgroud)

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