[英]Executable running on either .NET Framework 3.5 or 4.0
我們在現場有各種版本的基礎應用程序:
我們通過安裝程序分發更新,安裝程序在其中嵌入.NET可執行文件。 運行此安裝程序的PC可能具有以下基本應用程序的組合:
我需要確保安裝程序中嵌入的.NET可執行文件可靠運行。
我發現的方法建議將以下內容添加到app.config
文件中:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
幾個問題:
這是否意味着它將使用.NET Framework 4.0(如果存在),否則將使用.NET Framework 3.5(或任何以前使用2.0.50727
CLR的框架)? IOW,這些標簽按優先級排序嗎?
構建計算機上的.NET Framework版本是否對應用程序有任何運行時影響,或者app.config
文件中的版本的硬編碼是否始終優先?
如果我添加了依賴於.NET 4.0特有的功能的代碼,會發生什么? 在app.config
包含2.0.50727
版本(如上所示)會導致編譯時錯誤或運行時錯誤(僅當未安裝.NET 4.0時)?
是的,他們按優先順序排列。 使用簡單的控制台應用程序嘗試最簡單:
using System; class Test { static void Main() { Console.WriteLine(Environment.Version); } }
使用.NET 3.5編譯它,然后使用當前配置運行它,它將顯示4.0 - 然后切換行,它將顯示2.0。 有關更多詳細信息,請參閱此MSDN文章 。
您針對應用程序定位的框架版本非常重要。 如果您的配置指定您支持.NET 2,但您的目標是.NET 4,則該應用程序將無法啟動。
如果不針對.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.