gpt4 book ai didi

c# - 在 .NET Framework 3.5 或 4.0 上运行的可执行文件

转载 作者:太空狗 更新时间:2023-10-29 22:27:49 29 4
gpt4 key购买 nike

我们有各种版本的基础应用程序:

  • 1.0 版与 .NET Framework 3.5 捆绑在一起
  • 2.0 版与 .NET Framework 4.0 捆绑在一起

我们通过在其中嵌入 .NET 可执行文件的安装程序分发更新。运行此安装程序的 PC 可能具有我们的基本应用程序的以下组合:

  • 1.0 版和 2.0 版 (.NET 3.5/.NET 4.0)
  • 仅限 1.0 版(仅限 .NET 3.5)
  • 仅限 2.0 版(仅限 .NET 4.0)

我需要确保安装程序中嵌入的 .NET 可执行文件能够可靠地运行。

我发现的方法建议将以下内容添加到 app.config 文件中:

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>

几个问题:

  1. 这是否意味着它将使用 .NET Framework 4.0(如果存在),否则使用 .NET Framework 3.5(或使用 2.0.50727 CLR 的任何先前框架)? IOW,这些标签是按优先级排序的吗?

  2. 构建机器上的 .NET Framework 版本是否对应用程序有任何运行时影响,或者 app.config 文件中的版本硬编码是否总是需要优先级?

  3. 如果我添加依赖于 .NET 4.0 特定功能的代码会怎样?在 app.config 中包含 2.0.50727 版本(如上所示)会导致编译时错误或运行时错误(仅当 .NET 4.0 没有安装)?

最佳答案

  1. 是的,它们是按优先级排序的。使用简单的控制台应用程序最容易尝试:

    using System;

    class Test
    {
    static void Main()
    {
    Console.WriteLine(Environment.Version);
    }
    }

    用 .NET 3.5 编译它,然后用你当前的配置运行它,它会显示 4.0 - 然后切换行,它会显示 2.0。参见 this MSDN article了解更多详情。

  2. 您的应用程序定位的框架版本很重要。如果您的配置指定您支持 .NET 2,但您的目标是 .NET 4,则应用程序将不会启动。

  3. 如果不以 .NET 4 为目标,您就不会依赖特定于 .NET 4 的功能,在这种情况下,它不会在 .NET 2 上运行。

第 3 点严格是不准确的,因为根据运行的 .NET 版本,您可以做的事情会有所不同。例如,将应用更改为:

using System;
using System.Collections.Generic;

class Test
{
static void Main()
{
object o = new List<string>();
Console.WriteLine(o is IEnumerable<object>);
}
}

当使用 .NET 2 运行时将打印 False(因为 IEnumerable<T> 在 .NET 2 中是不变的)但是当使用 .NET 4 运行时它将打印 True,因为通用协方差。

关于c# - 在 .NET Framework 3.5 或 4.0 上运行的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9285915/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com