2016年4月26日 星期二

ASP.NET 交易機制 RollBack

01.using (SqlConnection conn = new SqlConnection("連線字串"))
02.{
03.  conn.Open();
04.  SqlCommand myCommand = conn.CreateCommand();
05.  SqlTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
06.   
07.  myCommand.Connection = conn;
08.  myCommand.Transaction = trans;
09.   
10.  try
11.  {  
12.      //要執行的SQL
13.      //INSERT INTO xxx (x,x,x) VALUES (x,x,x)
14.      myCommand.ExecuteNonQuery();
15.       
16.      //INSERT INTO yyy (y,y,y) VALUES (y,y,y)
17.      myCommand.ExecuteNonQuery();
18.                 
19.      trans.Commit();
20.      
21.  }
22.  catch (Exception e)
23.  {
26.          trans.Rollback();
27.  }
28.}

2016年4月23日 星期六

資料庫存取較好的寫法


1using (SqlConnection SqlConnection = new SqlConnection("...")) 
2
3    using (SqlCommand SqlCommand = SqlConnection.CreateCommand()) 
4    { 
5        SqlCommand.CommandText = "..."
6 
7        SqlConnection.Open(); 
8 
9        using (SqlDataReader SqlDataReader = SqlCommand.ExecuteReader()) 
10        { 
11            while (SqlDataReader.Read()) 
12            { 
13                //... 
14            } 
15        } 
16    } 
17

2016年4月22日 星期五

更換使用者權限

更換使用者權限:
執行「netplwiz」再按「Enter」鍵執行。選擇使用者的內容進行修改

2016年4月20日 星期三

Image to Base64 後呈現

出處 : 出處

案例概述

sshot-77

按下按鈕後 Server 會讀取一張根目錄下面 sample.jpg 的圖案 之後轉碼為 base64 且設定為 imageSample 的 src 屬性..


程式實作


將圖片轉 base64

C# Code:
/// <summary>
/// 自動判斷圖片格式
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public static System.Drawing.Imaging.ImageFormat GetImageFormat(System.Drawing.Image img)
{
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
        return System.Drawing.Imaging.ImageFormat.Jpeg;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))
        return System.Drawing.Imaging.ImageFormat.Bmp;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
        return System.Drawing.Imaging.ImageFormat.Png;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Emf))
        return System.Drawing.Imaging.ImageFormat.Emf;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Exif))
        return System.Drawing.Imaging.ImageFormat.Exif;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
        return System.Drawing.Imaging.ImageFormat.Gif;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))
        return System.Drawing.Imaging.ImageFormat.Icon;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.MemoryBmp))
        return System.Drawing.Imaging.ImageFormat.MemoryBmp;
    if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))
        return System.Drawing.Imaging.ImageFormat.Tiff;
    else
        return System.Drawing.Imaging.ImageFormat.Wmf;
}
 
/// <summary>
/// 將 Image 物件轉 Base64
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public string ImageToBase64(System.Drawing.Image image)
{
     
    MemoryStream ms = new MemoryStream();
 
    System.Drawing.Imaging.ImageFormat format = GetImageFormat(image);
 
    // 將圖片轉成 byte[]
    image.Save(ms, format);
    byte[] imageBytes = ms.ToArray();
 
    // 將 byte[] 轉 base64
    string base64String = Convert.ToBase64String(imageBytes);
    return base64String;
 
}

這裡面我是改寫   http://www.dailycoding.com/Posts/convert_image_to_base64_string_and_base64_string_to_image.aspx
讓其自動判斷格式

之後我們呼叫這 function

 
protected void Button1_Click(object sender, EventArgs e)
{
 
// 讀取圖片並轉為 Image 物件
var image= System.Drawing.Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "sample.jpg");
 
// 設定至 imgSample 並且自動判定格式 
imgSample.Src = "data:image/" + GetImageFormat(image) + ";base64," + ImageToBase64(image);
 
// 將 base64 寫檔案 比較檔案大小
File.WriteAllText

C# winform 關閉Form應用程式

出處 : 出處

~這個關閉視窗的程式碼不會有後遺症~
~真正的關掉了視窗~
~後面的程式不會繼續在內部動作~
~運用上也很方便~
~留在這裡記錄起來~
========================================

      public Form()
      {
            this.Close();
            Environment.Exit(Environment.ExitCode);

            InitializeComponent();
        }

共用Click事件

source : source


此例的功能是共用同一個Click事件,當按下button時,顯示該button的Text文字
如果一個按鈕一個事件的話,程式碼就是像下面那麼長,本例使用三個按鈕,
有15行
private void button1_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
MessageBox.Show(btn.Text);
}
private void button2_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
MessageBox.Show(btn.Text);
}
private void button3_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
MessageBox.Show(btn.Text);
}

如果我們共用同一個click事件,程式碼只有5行
private void button1_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
MessageBox.Show(btn.Text);
}
為了方便使用,我在InitializeComponent(); 下加上以下程式碼
button1.Click += new System.EventHandler(button1_Click);//按下button1觸發button1_Click
button2.Click += new System.EventHandler(button1_Click);//按下button2觸發button1_Click
button3.Click += new System.EventHandler(button1_Click);//按下button3觸發button1_Click
以下為此範例之完整原始碼
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9.   
  10. namespace ex11  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.             button1.Click += new System.EventHandler(button1_Click);//按下button1觸發button1_Click  
  18.             button2.Click += new System.EventHandler(button1_Click);//按下button2觸發button1_Click  
  19.             button3.Click += new System.EventHandler(button1_Click);//按下button3觸發button1_Click  
  20.         }  
  21.   
  22.         private void button1_Click(object sender, EventArgs e)  
  23.         {  
  24.             Button btn = (Button)sender;  
  25.             MessageBox.Show(btn.Text);  
  26.         }  
  27.         //private void button2_Click(object sender, EventArgs e)  
  28.         //{  
  29.         //    Button btn = (Button)sender;  
  30.         //    MessageBox.Show(btn.Text);  
  31.         //}  
  32.         //private void button3_Click(object sender, EventArgs e)  
  33.         //{  
  34.         //    Button btn = (Button)sender;  
  35.         //    MessageBox.Show(btn.Text);  
  36.         //}  
  37.     }  
  38. }  

TextBox 當滑鼠點擊後清空默認提示文字

source : source

[ 方法一]
前台程式碼:
<div>
    <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
    <asp:TextBox ID="txtPwd" runat="server"></asp:TextBox>
    <asp:Button ID="btnLongin" runat="server" Text="提交" />
</div>

後程式碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //用户输入
        txtName.Attributes.Add("Value", "请输入用户名");
        txtName.Attributes.Add("OnFocus", "if(this.value=='请输入用户名') {this.value=''}");
        txtName.Attributes.Add("OnBlur", "if(this.value==''){this.value='请输入用户名'}");
        //密码输入
        txtPwd.Attributes.Add("Value", "请输入密码");
        txtPwd.Attributes.Add("OnFocus", "if(this.value=='请输入密码'){this.value=''}");
        txtPwd.Attributes.Add("OnBlur", "if(this.value==''){this.value='请输入密码'}");

        //
        if (!IsPostBack)
        {
            //内容
        }
    }
}


[ 方法二]
前台文本框里添加下面2个事件属性:
OnFocus="javascript:if(this.value=='提示文字') {this.value=''}"
OnBlur="javascript:if(this.value=='') {this.value='提示文字'}"
-----------------------------------例-----------------------------------------
<asp:TextBox ID="txtName" runat="server" Text="请输入用户名"
OnFocus="javascript:if(this.value=='请输入用户名') {this.value=''}"
OnBlur="javascript:if(this.value==''){this.value='请输入用户名'}">
</asp:TextBox>

<asp:TextBox ID="txtPwd" runat="server" Text="请输入密码"
OnFocus="javascript:if(this.value=='请输入密码') {this.value=''}"
OnBlur="javascript:if(this.value==''){this.value='请输入密码'}">
</asp:TextBox>

2016年4月17日 星期日

釐清 CLR、.NET、C#、Visual Studio、ASP.NET 各版本之間的關係

出處:The Will Will Web

長久以來,我發現有許多 .NET 開發人員其實不是很熟悉自己每天都在面對的 .NET Framework, C#, Visual Studio 與 ASP.NET 版本之間的關係,以至於經常在找資料時下錯關鍵字,不容易命中想找的資料,今日特別撰文說明這幾項技術與工具在各版本之間的關係。

名詞定義

下列這些名詞,寫 .NET 的人一定都不陌生,但你是否有真正理解呢?如果看了我的摘要文字說明還無法理解的話,建議多查詢相關文件或書籍,或直接在文章最下方留言討論。
  • CLR ( Common Language Runtime )
    • CLR 是 .NET Framework 的虛擬機器元件 (virtual machine component),用來管理執行中的 .NET 程序。
    • CLR 有個重要的流程是 JIT 編譯 (just-in-time compilation) 機制,可以將 .NET 程式編譯過的 中繼語言 (Intermediate language) 編譯為當前 CPU 架構可執行的機器碼 (machine instructions)。
    • CLR 提供記憶體管理型別安全例外處理垃圾回收機制 (GC)、安全性執行緒管理等服務。
    • 無論什麼程式語言,只要是基於 .NET 框架的程式,都必須執行於 CLR 提供的執行環境(虛擬機器)中。
    • CLR 包含一系列 基礎類別函式庫 (BCL) ( Base Class Libraries ),用來提供 .NET 執行時期需要的程式基礎。
    • 在該函式庫中含有一堆 組件 (Assembly) 與 型別 (Type) 定義,如命名空間、類別、介面、列舉、… 等等。
  • .NET
    • .NET Framework 的簡稱,有時候泛指 .NET 相關的各種技術。
    • .NET Framework 包含一系列 框架類別函式庫 ( FCL ) ( Framework Class Libraries ),用來擴充 BCL 不足的地方。
  • C#
    • 是一種 型別安全 (Type-safe) 的 物件導向 (object-oriented) 的程式語言 (Programming Language)
    • 這裡的 型別安全 泛指所有的 C# 物件都是具有型別的,例如 Int32, String, StringBuilder, … 等等都是型別,在各型別的繼承關係中,最上層的型別為 object
    • C# 包含一套 編譯器 (Compiler),可將 C# 程式碼編譯為 .NET 中繼語言 ( IL ) (Intermediate language),執行檔為 csc.exe
    • C# 編譯器在編譯時,可以透過 /langversion 參數指定其編譯的版本,目前支援 ISO-1、ISO-2、3、4、5 等版本。
    • C# 6.0 開始,採用全新的 Roslyn 編譯器平台,跟傳統編譯器的架構差別非常大,且編譯器本身開放原始碼。
    • C# 6.0 的 csc.exe 編譯器改由 NuGet 進行安裝,如需在專案中使用 C# 6.0 語法,則需額外安裝 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 套件。
    • 在開發應用程式的時候又有區分「強型別」與「弱型別」的開發方式。
      • 強型別:存取物件資料時,不需要額外轉型的開發方法,凡事都用明確的型別來表達與傳遞資料。
      • 弱型別:存取物件資料時,用較為抽象的型別來保存資料,需要用到資料時再透過轉型得到真正的型別。
    • 程式語言都有「語言特性」,有些 C# 的語言特性會需要用到 .NET Framework 的特定類別,因此 C# 通常會與 .NET Framework 有版本的相依性。
    • C# 的正確讀音是 C-Sharp,我曾經聽過有人唸成 C-Hash 是錯誤的唸法!
    • 補充一個有趣的點,其實 C# 並不是寫成 C#,而是 C♯,請注意這兩者的差別,一個是垂直線是斜斜的,一個是水平線是斜斜的,後面那個才是對的,如下圖示: 
      image 
  • Visual Studio
  • ASP.NET ( ASP.NET 官方網站 )
    • ASP.NET 自 2002 年一月推出的一套網頁開發框架,早期只有 ASP.NET Web Form 架構,直到 2009 年推出以 MVC 為主的開發框架 ( ASP.NET MVC 1.0 ),微軟預計在 2016 Q1 推出 ASP.NET 5 框架 (基於 ASP.NET MVC 的改進)。
    • 無論 ASP.NET Web Form 或 ASP.NET MVC 兩者都是 ASP.NET 框架的一部份,共用 ASP.NET 底層提供的各種函式庫。
    • 許多人會把 ASP.NET 簡稱為 ASP 其實是不洽當的,由於 ASP.NET 之前的網頁開發技術為 ASP (Active Server Page),簡稱 ASP 會導致溝通上的混亂。
    • 目前已推出的 ASP.NET Web Form 版本有
      • ASP.NET 1.0
      • ASP.NET 1.1
      • ASP.NET 2.0
      • ASP.NET 3.5
      • ASP.NET 4.0
      • ASP.NET 4.5
      • ASP.NET 4.6
    • 目前已推出的 ASP.NET MVC 版本有
      • ASP.NET MVC 1.0
      • ASP.NET MVC 2.0
      • ASP.NET MVC 3.0
      • ASP.NET MVC 4.0
      • ASP.NET MVC 5.x
      • ASP.NET MVC 6.0 ( 目前還在 beta 階段,此版本等同於 ASP.NET 5 版本 )

CLR 版本關聯

  • CLR 1.0
    • .NET Framework 1.0
      • C# 1.0
  • CLR 1.1
    • .NET Framework 1.1
      • C# 1.1
  • CLR 2.0
    • .NET Framework 2.0
      • C# 2.0
    • .NET Framework 3.0
      • C# 2.0
    • .NET Framework 3.5
      • C# 3.0
  • CLR 4
    • .NET Framework 4
      • C# 4.0
    • .NET Framework 4.5
      • C# 5.0
    • .NET Framework 4.5.1
      • C# 5.0
    • .NET Framework 4.5.2
      • C# 5.0
    • .NET Framework 4.6 ( 又稱 .NET 2015 )
      • C# 6.0

※ 注意事項 ※
  • 新版的 C# 編譯器通常可以編譯舊版的 C# 原始碼,也就是 C# 6.0 編譯器通常有能力編譯 C# 1.0 ~ 6.0 的程式碼,但編譯時一次只能選擇一個版本進行編譯。

.NET Framework 版本關聯

若要查詢 .NET Framework 與各版本的關係,建議可參考 .NET Framework Versions and Dependencies 網頁的表格說明,以下為摘要說明:
  • .NET Framework 1.0
    • 使用 CLR 1.0 版,需搭配 C# 1.0 編譯器
    • 內建於 Visual Studio .NET 開發工具
  • .NET Framework 1.1
    • 使用 CLR 1.1 版,需搭配 C# 1.1 編譯器
    • 內建於 Visual Studio 2003 開發工具
    • 推出 ASP.NET 1.1 版,支援 ADO.NET 資料存取技術
  • .NET Framework 2.0
    • 使用 CLR 2.0 版,需搭配 C# 2.0 編譯器
    • 內建於 Visual Studio 2005 與之後的每一版 Visual Studio 開發工具
    • 從 Visual Studio 2005 開始就不再支援 .NET 1.1 開發,因此開發 .NET 1.1 應用程式必須安裝 Visual Studio 2003
    • 推出 ASP.NET 2.0 版,增強 ASP.NET 功能 (並且與 ASP.NET 1.1 不相容),並支援泛型
  • .NET Framework 3.0
    • 使用 CLR 2.0 版,需搭配 C# 2.0 編譯器
    • 內建於 Visual Studio 2005 與之後的每一版 Visual Studio 開發工具
    • 主要針對 WPF, WCF, WF, CardSpace 功能進行強化,新增許多 FCL
  • .NET Framework 3.5
    • 使用 CLR 2.0 版,需搭配 C# 3.0 編譯器
    • 內建於 Visual Studio 2008 與之後的每一版 Visual Studio 開發工具
    • 主要針對 ASP.NET, LINQ, Dynamic Data, … 等許多功能進行強化,請參見 .NET Framework 的新功能 頁面說明
    • 推出 ASP.NET 3.5 版
  • .NET Framework 4
    • 使用 CLR 4 版,需搭配 C# 4.0 編譯器
    • 此版本 CLR 4 擴充了許多 BCL 類別庫
    • 內建於 Visual Studio 2010 與之後的每一版 Visual Studio 開發工具
    • 主要針對 BCL, Portable Class Library, MEF, DLR, code contracts, … 等許多功能進行強化,請參見 .NET Framework 4 的新功能 頁面說明
    • 推出 ASP.NET 4.0 版
  • .NET Framework 4.5
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2012 與之後的每一版 Visual Studio 開發工具
    • 主要針對 WPF, WCF, WF, ASP.NET updates, … 等許多功能進行強化,也支援 Windows Store apps 開發,請參見 .NET Framework 的新功能 頁面說明
    • 推出 ASP.NET 4.5 版,並且統一了
  • .NET Framework 4.5.1
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2013 與之後的每一版 Visual Studio 開發工具
    • 主要針對 Automatic binding redirection, 偵錯功能, … 等許多功能進行強化,也支援 Windows Phone Store apps 開發,請參見 .NET Framework 的新功能 頁面說明
  • .NET Framework 4.5.2
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2013 與之後的每一版 Visual Studio 開發工具
    • 主要針對 New APIs for transactional systems and ASP.NET, System DPI resizing in Windows Forms controls, Profiling improvements, ETW and stress logging improvements, … 等許多功能進行強化,請參見 .NET Framework 的新功能 頁面說明
  • .NET Framework 4.6 ( 又稱 .NET 2015 )
    • 使用 CLR 4 版,可搭配 C# 5.0 或 C# 6.0 編譯器
    • 內建於 Visual Studio 2013 與之後的每一版 Visual Studio 開發工具
    • 主要針對 Compilation using .NET Native, ASP.NET Core 5, Event tracing improvements, Support for page encodings, … 等許多功能進行強化,請參見 .NET Framework 的新功能 頁面說明
    • 推出 ASP.NET 5 Beta 5 (尚未正式版),關於 ASP.NET 5 的推出時程規劃請參見 ASP.NET 5 Schedule and Roadmap 頁面。
從上述整理的版本關聯關係中,你可以發現早期的 .NET Framework, CLR, C#, ASP.NET 版本之間是很容易記憶的,因為 .NET 1.1 搭配 CLR 1.1, C# 1.1 與 ASP.NET 1.1,而 .NET 2.0 搭配 CLR 2.0, C# 2.0 與 ASP.NET 2.0,到了 .NET 3.5 開始出現版本號的變化,因為 .NET 3.5 搭配著 CLR 2.0 與 C# 3.0,光是這點差異,在當時已經讓有些人混淆了,我相信到 2015 年的今天,還是有許多人搞不清楚。從 .NET 4 開始,是一個新的 CLR 版本的起點 ( CLR 4 ),需搭配 C# 4.0,算是好記許多。不過到了 .NET 4.5 有些功能就需要搭配 C# 5.0 才能編譯。

Visual Studio 版本關聯

  • Visual Studio .NET
    • 支援 .NET Framework 1.0
      • 可開發 ASP.NET 1.0
  • Visual Studio 2003
    • 支援 .NET Framework 1.1
      • 可開發 ASP.NET 1.1
  • Visual Studio 2005
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
  • Visual Studio 2008
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5, ASP.NET MVC 1.0
      • 支援 Entity Framework 3.5
  • Visual Studio 2010
    • 開始支援 Visual Studio 擴充套件
    • 開始使用 NuGet 管理 .NET 套件
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5, ASP.NET MVC 2.0
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0
      • 可開發 ASP.NET 4.0, ASP.NET MVC 3.0, ASP.NET MVC 4.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0 (僅 runtime 支援,可編譯,沒有設計工具)
  • Visual Studio 2012
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0   ( 從 .NET 4.5 開始預設採用 C# 4.0 編譯器 )
      • 可開發 ASP.NET 4.0, ASP.NET MVC 3.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
    • 支援 .NET Framework 4.5
    • 支援 .NET Framework 4.5.1
    • 支援 .NET Framework 4.5.2
      • 可開發 ASP.NET 4.5, ASP.NET MVC 3.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
  • Visual Studio 2013
    • 專案範本預設改用 NuGet 管理套件
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0
      • 可開發 ASP.NET 4.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
    • 支援 .NET Framework 4.5   ( 從 .NET 4.5 開始預設採用 C# 5.0 編譯器 )
    • 支援 .NET Framework 4.5.1
    • 支援 .NET Framework 4.5.2
      • 可開發 ASP.NET 4.5, ASP.NET MVC 4.0, ASP.NET MVC 5.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
    • 支援 .NET Framework 4.6
      • 可開發 ASP.NET 4.6
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
  • Visual Studio 2015
    • 專案範本預設改用 NuGet 管理套件
    • 支援 .NET Framework 2.0
      • 可開發 ASP.NET 2.0
    • 支援 .NET Framework 3.0
      • 與 ASP.NET 無關
    • 支援 .NET Framework 3.5
      • 可開發 ASP.NET 3.5
      • 支援 Entity Framework 4.x
    • 支援 .NET Framework 4.0
      • 可開發 ASP.NET 4.0, ASP.NET MVC 4.0, ASP.NET MVC 5.0
    • 支援 .NET Framework 4.5   ( 從 .NET 4.5 開始預設採用 C# 6.0 編譯器 )
    • 支援 .NET Framework 4.5.1
    • 支援 .NET Framework 4.5.2
      • 可開發 ASP.NET 4.5, ASP.NET MVC 5.0
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
    • 支援 .NET Framework 4.6
      • 可開發 ASP.NET 4.6, ASP.NET MVC 5.0
      • 可開發 ASP.NET 5 / ASP.NET MVC 6 (目前還在 beta 階段)
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
      • 支援 Entity Framework 7.x (目前還在 beta 階段)
    • 支援 .NET Core 5
      • 可開發 ASP.NET 5 / ASP.NET MVC 6 (目前還在 beta 階段)
      • 支援 Entity Framework 5.0
      • 支援 Entity Framework 6.0
      • 支援 Entity Framework 7.x (目前還在 beta 階段)

※ 注意事項 ※
  • Entity Framework 7 將會是一套全新的 Entity Framework 版本,與前版的 Entity Framework 6 是兩套完全不同的產品。
  • 在同一個專案下,就算同時載入 Entity Framework 6 與 Entity Framework 7 也不會發生任何衝突或互相影響。
  • 就算你用 ASP.NET 5 開發網站,一樣可以使用 Entity Framework 6 進行資料存取。