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

15

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

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

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

在app.config中使用<supportedRuntime>tag似乎没有帮助,因为它指定了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)

(请注意,类似的问题在Element文档的“社区内容”部分中没有得到回答。)

4个回答

16

从提出问题到得到答案。如元素文档所述:

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

因此,实现第二个选项(“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
你无法使用这个设置进行调试——它会出现错误,并且VS2008不支持.NET 4。但是,将其用于在VS之外运行发布版本构建工作正常。 - ChrisF
如果在文件结尾(就在</configuration>之前)没有<startup>元素,至少在Framework v3.5上,我曾经遇到过应用程序启动失败的情况。如果你遇到启动问题,值得尝试将此配置移动到文件末尾。 - paytools-steve
如果我只留下v4.0作为SupportedRuntime,而系统中只有v4.5,它是否仍会使用v4.5?如何强制只使用一个版本? - Kamilos

0

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


0

另一个有用的链接是MSDN上的this page。如果您只想针对客户端配置文件进行目标设置,或者需要完整的配置文件,此页面将显示所有所需值。


-1
如果您有一个非托管的 EXE 调用 .NET DLL,您需要创建一个名为 foo.exe.config 的文件,并包含上述 <startup>... 块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接