共用方式為


適用於 Windows 市集應用程式的 .NET 概觀

.NET Framework 提供 Managed 類型子集,可讓您在 C# 或 Visual Basic 中用來建立 Windows 市集應用程式。這個 Managed 類型子集稱為 適用於 Windows 市集應用程式的 .NET,.NET Framework 開發人員可以在熟悉的程式設計架構中用來建立 Windows 市集應用程式。這個子集不包含任何與開發 Windows 市集應用程式不相關的類型。

您可以使用這些 Managed 類型搭配 Windows 執行階段 應用程式開發介面的類型,來建立 Windows 市集應用程式。一般來說,Managed 類型的用法和 Windows 執行階段類型幾乎相同,除了 Managed 類型位於 System 開頭的命名空間中,而 Windows 執行階段類型位於 Windows 開頭的命名空間中。適用於 Windows 市集應用程式的 .NET 和 Windows 執行階段一同使用,可以提供以 C# 或 Visual Basic 開發 Windows 市集應用程式時的完整類型和成員集合。

Managed 類型和成員子集的設計目的,很明確是以 Windows 市集應用程式開發為主。因此,它省略下列項目:

  • 不適用於開發 Windows 市集應用程式的類型和成員 (例如主控台和 ASP.NET 類型)。

  • 過時和舊版類型。

  • 與 Windows 執行階段類型重疊的類型。

  • 封裝作業系統功能的類型和成員 (例如 EventLog 和效能計數器)。

  • 會造成混淆的成員 (例如 I/O 類型上的 Close 方法)。

某些情況下,您在 .NET Framework 傳統型應用程式中使用的類型,不存在於 適用於 Windows 市集應用程式的 .NET 中。您可以改為使用 Windows 執行階段的類型。例如適用於 Windows 市集應用程式的 .NET 不包含 System.IO.IsolatedStorage.IsolatedStorageSettings 類別,但 Windows.Storage.ApplicationDataContainer 類別可以提供類似於儲存應用程式設定的行為。轉換現有的 .NET Framework 程式碼章節提供您必須進行的一般變更之範例。

當您使用 C# 或 Visual Basic 建立 Windows 市集應用程式時,您的專案會自動參考整組 適用於 Windows 市集應用程式的 .NET 組件。因此,您可以在專案中使用 適用於 Windows 市集應用程式的 .NET 支援的任何一個類型,而不需要任何額外的動作。如需 適用於 Windows 市集應用程式的 .NET 和 Windows 執行階段提供的合併命名空間清單 (依功能區域分組),請參閱 .NET Framework 和 Windows 執行階段命名空間章節。

如需 .NET Framework 子集包含的命名空間和類型清單,請參閱 適用於 Windows 市集應用程式的 .NET 應用程式開發介面

您也可以建立可攜式類別庫專案來開發 .NET Framework 程式庫,再從 Windows 市集應用程式使用這些 .NET Framework 程式庫。專案必須包含 [適用於 Windows 市集應用程式的 .NET] 做為其中一個目標平台。當您想要開發可從各種不同平台的應用程式 (例如 Windows Phone 應用程式、傳統型應用程式和 Windows 市集應用程式) 使用的類別時,可攜式類別庫就會很有用。請參閱可攜式類別庫的跨平台開發.

本主題包含下列章節:

  • 轉換現有的 .NET Framework 程式碼

  • 轉換類型的擴充方法

  • .NET Framework 和 Windows 執行階段命名空間

這些主題提供如何將應用程式其他部分轉換成 Windows 執行階段的相關資訊:

轉換現有的 .NET Framework 程式碼

通常不是單純將現有的 .NET Framework 應用程式直接轉換為 Windows 市集應用程式,而是必須重新設計符合新使用者經驗的 .NET Framework 應用程式。不過,您可以轉換現有 .NET Framework 應用程式的一部分,在新的 Windows 市集應用程式中使用。當您轉換現有的 .NET Framework 程式碼時,請注意必須在 Windows 市集應用程式中進行下列變更:

  • UI 變更

  • I/O 變更

  • 儲存變更

  • 網路變更

  • 執行緒變更

  • 反映變更

  • 安全性變更

  • 資源變更

  • 例外狀況變更

  • WCF 變更

  • 一般 .NET Framework 類型中的變更

BR230302.collapse_all(zh-tw,VS.120).gifUI 變更

轉換 Silverlight 架構應用程式或 Windows Phone 應用程式的 UI 程式碼時,您可以使用多個相同的 UI 類型,但是這些類型現在位於 Windows.UI.Xaml 命名空間中,而不是 System.Windows 命名空間中。這些新的 UI 類型類似於舊版 .NET Framework UI 類型,但包含一些不同的成員。

取代

System.Windows.* 命名空間中的 UI 類型

Windows.UI.Xaml.* 命名空間中的 UI 類型

(例如 Border 類別位於 Windows.UI.Xaml.Controls 命名空間中)

如需移植 UI 程式碼的詳細資訊,請參閱將 Windows Phone 7 應用程式移植到 XAML

BR230302.collapse_all(zh-tw,VS.120).gifI/O 變更

I/O 類型包含新成員,可以支援非同步程式設計模型的新 await 關鍵字。

取代

System.IO.Stream.BeginRead 和 EndRead 方法

System.IO.Stream.ReadAsync 方法

如需範例,請參閱 ReadAsync(array<Byte[], Int32, Int32)。

System.IO.Stream.BeginWrite 和 EndWrite 方法

System.IO.Stream.WriteAsync 方法

如需範例,請參閱 WriteAsync(array<Byte[], Int32, Int32)。

I/O 類別上的 Close() 方法

I/O 類別上的 Dispose() 方法。

-或-

宣告並具現化 using (C#) 或 Using (Visual Basic) 陳述式內的 I/O 物件,以確保適當加以處置,例如:

using (StreamReader sr = 
  new StreamReader(await passedFile.OpenStreamForReadAsync()))
{
    while ((nextLine = await sr.ReadLineAsync()) != null)
    {
        contents.Append(nextLine);
    }
}
Using sr As StreamReader = 
  New StreamReader(Await passedFile.OpenStreamForReadAsync())
    While (nextLine = Await sr.ReadLineAsync()) <> Nothing
        contents.Append(nextLine)
    End While
End Using

System.IO.File.ReadAllText 方法

Windows.Storage.PathIO 類別中的 ReadTextAsync 方法

擷取和開啟檔案的程式碼

public static async void ReadFileSamples()
{
  // Read a file from package
  StorageFolder packageFolder = 
      ApplicationModel.Package.Current.InstalledLocation;
  StorageFile packagedFile = 
      await packageFolder.GetFileAsync("FileInPackage");

  // Read a file from AppData
  StorageFolder localFolder = ApplicationData.Current.LocalFolder;
  StorageFile localFile = 
    await localFolder.GetFileAsync("FileInAppData");
}
Public Async Shared Sub ReadFileSamples()
  ' Read a file from package
  Dim packageFolder As StorageFolder = 
      ApplicationModel.Package.Current.InstalledLocation
  Dim packagedFile As StorageFile = 
      Await packageFolder.GetFileAsync("FileInPackage")

  ' Read a file from AppData
  Dim localFolder As StorageFolder = ApplicationData.Current.LocalFolder
  Dim localFile As StorageFile = 
    Await localFolder.GetFileAsync("FileInAppData ")
End Sub

BR230302.collapse_all(zh-tw,VS.120).gif儲存變更

原本使用 System.IO.IsolatedStorage 類別,改為使用 Windows.Storage 命名空間中的類型來儲存本機資料和檔案。

取代

System.IO.IsolatedStorage.IsolatedStorageFile 類別

Windows.Storage.ApplicationData 類別的 LocalFolder 屬性

ApplicationData.Current.LocalFolder

System.IO.IsolatedStorage.IsolatedStorageSettings 類別

Windows.Storage.ApplicationData 類別的 LocalSettings 屬性

ApplicationData.Current.LocalSettings

如需詳細資訊,請參閱應用程式資料

BR230302.collapse_all(zh-tw,VS.120).gif網路變更

取代

System.Net.WebClient 類別

傳送 HTTP 要求和接收 HTTP 回應的 HttpClient 類別

-或-

Windows.Networking.BackgroundTransfer 命名空間中的類型,可用於上傳或下載大量的資料

System.Net.Sockets 命名空間中的類型

Windows.Networking.Sockets 命名空間中的類型

相對 URI (傳遞至 Windows 執行階段類型)

絕對 URI

如需詳細資訊,請參閱傳遞 URI 給 Windows 執行階段.

攔截 UriFormatException 例外狀況的例外狀況處理程式碼

攔截 FormatException 例外狀況的程式碼,此為 UriFormatException 的父類別

BR230302.collapse_all(zh-tw,VS.120).gif執行緒變更

某些 .NET Framework 執行緒成員已變更,而有些類型現在可用於 Windows 執行階段 應用程式開發介面。

取代

System.Threading.Thread.MemoryBarrier 方法

System.Threading 命名空間中的 Interlocked.MemoryBarrier 方法

System.Threading.Thread.ManagedThreadId 屬性

System 命名空間中的 Environment.CurrentManagedThreadId 屬性

System.Threading.Thread.CurrentCulture 屬性

System.Globalization 命名空間中的 CultureInfo.CurrentCulture 屬性

System.Threading.Thread.CurrentUICulture 屬性

System.Globalization 命名空間中的 CultureInfo.CurrentUICulture 屬性

System.Threading.Timer 類別

Windows.System.Threading.ThreadPoolTimer 類別

System.Threading.ThreadPool 類別

Windows.System.Threading.ThreadPool 類別

將工作加入集區佇列的程式碼

Task.Run(() => 
{ 
  // work goes here
});
Task.Run(
    Sub()
        ' work goes here
    End Sub)

將工作加入集區佇列並等候完成的程式碼

await Task.Run(() => 
{ 
  // work goes here
});
Await Task.Run(
    Sub()
        ' work goes here
    End Sub)

建立長時間執行工作項目的程式碼

Task.Factory.StartNew(() => 
{ 
  // work goes here
}, TaskCreationOptions.LongRunning);
Task.Factory.StartNew(
    Sub()
        ' work goes here
    End Sub, TaskCreationOptions.LongRunning)

BR230302.collapse_all(zh-tw,VS.120).gif反映變更

System.Type 類別的大部分成員都已移至 System.Reflection.TypeInfo 類別。您可以透過呼叫 System.Reflection.IntrospectionExtensions.GetTypeInfo(System.Type) 方法來擷取 TypeInfo 物件,這是 Type 的擴充方法。

取代

type.Assembly

type.GetTypeInfo().Assembly

type.GetMethods(BindingFlags.DeclaredOnly)

type.GetTypeInfo().DeclaredMethods

type.GetMethod("MethodName", BindingFlags.DeclaredOnly)

type.GetTypeInfo().GetDeclaredMethod("MethodName")

type.GetNestedTypes()

type.GetTypeInfo().DeclaredNestedTypes

System.Delegate.CreateDelegate 方法

MethodInfo.CreateDelegate 方法

如需詳細資訊,請參閱 MSDN Library 中的 適用於 Windows 市集應用程式之 .NET Framework 中的反映

BR230302.collapse_all(zh-tw,VS.120).gif安全性變更

許多安全性、驗證和密碼編譯作業的類型都可透過 Windows 執行階段類型使用。如需 Windows 市集應用程式可用之安全性命名空間的完整清單,請參閱本主題稍後的安全性命名空間清單。

BR230302.collapse_all(zh-tw,VS.120).gif資源變更

對於 Windows 市集應用程式,您將建立單一資源檔,而不是傳統型應用程式中使用的中樞和支點模型。除此之外,請使用 Windows.ApplicationModel.ResourcesWindows.ApplicationModel.Resources.Core 命名空間中的資源類型,而不要使用 System.Resources 命名空間。

如需詳細資訊,請參閱建立和擷取 Windows 市集應用程式中的資源.

BR230302.collapse_all(zh-tw,VS.120).gif例外狀況變更

在某些情況下,Managed 類型會擲回 適用於 Windows 市集應用程式的 .NET 不包含的例外狀況。在這些情況下,您可以攔截不包含之例外狀況的父類別。例如,在傳統型應用程式中,您攔截 UriFormatException 例外狀況以處理無效 URI,但在 Windows 市集 應用程式中,您攔截 FormatException 例外狀況,因為 UriFormatException 不包含在 適用於 Windows 市集應用程式的 .NET 中。FormatException 是 UriFormatException 的父類別。

BR230302.collapse_all(zh-tw,VS.120).gifWCF 變更

在 Windows 市集應用程式中,您可以利用 Windows Communication Foundation (WCF) 用戶端功能來擷取 WCF 服務的資料,但您無法建立 WCF 服務來服務資料。

BR230302.collapse_all(zh-tw,VS.120).gif一般 .NET Framework 類型中的變更

取代

System.Xml.XmlConvert.ToDateTime 方法

XmlConvert.ToDateTimeOffset 方法

System.ICloneable 介面

傳回適當類型的自訂方法

System.Array.AsReadOnly and System.Collections.Generic.List<T>.AsReadOnly 方法

ReadOnlyCollection 類別的新執行個體,建立方法如下:

new ReadOnlyCollection<string>(selectedList)
New ReadOnlyCollection(Of String)(selectedList)

轉換類型的擴充方法

在大多數情況下,您都能使用 .NET Framework 類型搭配 Windows 執行階段類型來開發 Windows 市集應用程式,無須任何特殊考量或轉換。不過,在少數情況下,.NET Framework 也提供擴充方法,簡化 .NET Framework 類型和 Windows 執行階段類型之間的互動。這些擴充方法位於下列類別中:

  • WindowsRuntimeStreamExtensions – 在 Managed 資料流和 Windows 執行階段的資料流之間進行轉換。

  • WindowsRuntimeStorageExtensions – 開啟 Windows 執行階段檔案和資料夾做為 Managed 資料流。

  • WindowsRuntimeBufferExtensions – IBuffer 的轉換。

.NET Framework 和 Windows 執行階段命名空間

下列各節列出 適用於 Windows 市集應用程式的 .NET 和 Windows 執行階段提供的命名空間清單,依功能分組。

BR230302.collapse_all(zh-tw,VS.120).gif集合

BR230302.collapse_all(zh-tw,VS.120).gif核心

BR230302.collapse_all(zh-tw,VS.120).gif資料和內容

BR230302.collapse_all(zh-tw,VS.120).gif裝置

BR230302.collapse_all(zh-tw,VS.120).gif診斷

BR230302.collapse_all(zh-tw,VS.120).gif檔案和資料夾

BR230302.collapse_all(zh-tw,VS.120).gif全球化

BR230302.collapse_all(zh-tw,VS.120).gif圖形

BR230302.collapse_all(zh-tw,VS.120).gifManaged Extensibility Framework (MEF)

若要安裝下列命名空間,請在 Visual Studio 2012 (含) 以後版本中開啟您的專案,選擇 [專案] 功能表中的 [管理 NuGet 封裝],並在線上搜尋 Microsoft.Composition 封裝。

BR230302.collapse_all(zh-tw,VS.120).gif媒體

BR230302.collapse_all(zh-tw,VS.120).gif網路

BR230302.collapse_all(zh-tw,VS.120).gif展示

BR230302.collapse_all(zh-tw,VS.120).gif列印

BR230302.collapse_all(zh-tw,VS.120).gif反映

BR230302.collapse_all(zh-tw,VS.120).gif資源

BR230302.collapse_all(zh-tw,VS.120).gif安全性

BR230302.collapse_all(zh-tw,VS.120).gif社交

BR230302.collapse_all(zh-tw,VS.120).gif執行緒處理

BR230302.collapse_all(zh-tw,VS.120).gifUI 自動化

BR230302.collapse_all(zh-tw,VS.120).gif使用者互動

BR230302.collapse_all(zh-tw,VS.120).gif語言和編譯器

請參閱

概念

適用於 Windows 市集應用程式的 .NET 應用程式開發介面

在 C++ 和 Visual Basic 中建立 Windows 執行階段元件

其他資源

適用於 Windows 市集應用程式和 Windows 執行階段的 .NET Framework 支援