Share via


適用於 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 執行階段型別重疊的型別。

  • 封裝作業系統功能的型別和成員 (例如 System.Diagnostics.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 執行階段命名空間

轉換現有的 .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.110).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.110).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.110).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.110).gif網路變更

取代

System.Net.WebClient 類別

傳送 HTTP 要求和接收 HTTP 回應的 System.Net.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.110).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.110).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.110).gif安全性變更

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

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

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

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

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

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

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

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

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

取代

System.Xml.XmlConvert.ToDateTime 方法

XmlConvert.ToDateTimeOffset 方法

System.ICloneable 介面

傳回適當型別的自訂方法

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

System.Collections.ObjectModel.ReadOnlyCollection<T> 類別的新執行個體,建立方法如下:

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

轉換型別的擴充方法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

請參閱

概念

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

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

其他資源

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