簡體   English   中英

可在.NET Framework 3.5或4.0上運行的可執行文件

[英]Executable running on either .NET Framework 3.5 or 4.0

我們在現場有各種版本的基礎應用程序:

  • 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。 有關更多詳細信息,請參閱此MSDN文章

  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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM