.NET for Windows Store 应用程序概述

.NET Framework 提供托管类型的一个子集,通过该子集,可使用 C# 或 Visual Basic 创建 Windows 应用商店应用程序。这个托管类型子集名为适用于 Windows 应用商店应用的 .NET,允许 .NET Framework 开发人员在熟悉的编程框架中创建 Windows 应用商店应用程序。此子集不包括与开发 Windows 应用商店应用程序相关的任何类型。

可将这些托管类型与来自 Windows 运行时 API 的类型结合使用,以创建 Windows 应用商店应用程序。通常,你不会注意到使用托管类型与使用 Windows 运行时类型的区别,你只会注意到:托管类型位于以 System 开头的命名空间中,Windows 运行时类型位于以 Windows 开头的命名空间中。适用于 Windows 应用商店应用的 .NET 和 Windows 运行时一起使用,就是一个类型和成员的完整集合,可通过 C# 或 Visual Basic 开发 Windows 应用商店应用程序。

在设计托管类型和成员的子集时,就已明确考虑到 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 子集中包括的命名空间和类型的列表,请参见.NET for Windows Store 应用程序 - 支持的 API

还可以创建 可移植类库 项目,以开发可通过 Windows 应用商店应用程序使用的 .NET Framework 库。该项目必须包括**“.NET for Windows Store 应用程序”**作为目标平台之一。当你要开发可在不同类型平台的应用程序(例如,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-cn,VS.110).gifUI 更改

在转换基于 Silverlight 的应用程序或 Windows Phone 应用程序中的 UI 代码时,可以使用许多相同的 UI 类型,但这些类型现在不在 System.Windows 命名空间中,而在 Windows.UI.Xaml 命名空间中。这些新 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-cn,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-cn,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-cn,VS.110).gif网络更改

将以下类型

替换为以下类型

System.Net.WebClient 类

用于发送 HTTP 请求和接收 HTTP 响应的 System.Net.Http.HttpClient

- 或 -

Windows.Networking.BackgroundTransfer 命名空间中用于上载或下载大量数据的类型

System.Net.Sockets 命名空间中的类型

Windows.Networking.Sockets 命名空间中的类型

相对 URI(在传递给 Windows 运行时类型时)

绝对 URI

有关更多信息,请参见向 Windows 运行时传递 URI

捕获 UriFormatException 异常的异常处理代码

捕获 FormatException 异常的代码,它是 UriFormatException 的父类

BR230302.collapse_all(zh-cn,VS.110).gif线程处理更改

有些 .NET Framework 线程处理成员已更改,有些类型现在在 Windows 运行时 API 中可用。

将以下类型

替换为以下类型

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-cn,VS.110).gif反射更改

System.Type 类中的大多数成员均已移至 System.Reflection.TypeInfo 类。可通过调用 System.Reflection.IntrospectionExtensions.GetTypeInfo(System.Type) 方法(Type 的扩展方法)来检索 TypeInfo 对象。

将以下类型

替换为以下类型

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 库中的.NET Framework 中用于 Windows 应用商店应用程序的反射

BR230302.collapse_all(zh-cn,VS.110).gif安全更改

许多安全性、身份验证和加密操作类型均可通过 Windows 运行时类型获得。有关可用于 Windows 应用商店应用程序的安全命名空间的完整列表,请参见本主题稍后的安全命名空间列表。

BR230302.collapse_all(zh-cn,VS.110).gif资源更改

对于 Windows 应用商店应用程序,创建单个资源文件而不是用于桌面应用程序的集散模型。此外,请使用 Windows.ApplicationModel.ResourcesWindows.ApplicationModel.Resources.Core 命名空间而不是 System.Resources 命名空间中的资源类型。

有关更多信息,请参见在 Windows 应用商店应用程序中创建和检索资源

BR230302.collapse_all(zh-cn,VS.110).gif异常更改

有时侯,托管类型会引发适用于 Windows 应用商店应用的 .NET 中未包括的异常。在这些情况下,可以捕获未包括的异常的父类。例如,在桌面应用程序中,捕获 UriFormatException 异常以处理无效 URI;但在 Windows 应用商店应用程序中,需捕获 FormatException 异常,因为 适用于 Windows 应用商店应用的 .NET中不包括 UriFormatExceptionFormatExceptionUriFormatException 的父类。

BR230302.collapse_all(zh-cn,VS.110).gifWCF 更改

在 Windows 应用商店应用程序中,可以利用 Windows Communication Foundation (WCF) 客户端功能从 WCF 服务中检索数据,但不能创建 WCF 服务来为数据提供服务。

BR230302.collapse_all(zh-cn,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-cn,VS.110).gif集合

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

BR230302.collapse_all(zh-cn,VS.110).gif数据和内容

BR230302.collapse_all(zh-cn,VS.110).gif设备

BR230302.collapse_all(zh-cn,VS.110).gif诊断

BR230302.collapse_all(zh-cn,VS.110).gif文件和文件夹

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

BR230302.collapse_all(zh-cn,VS.110).gif图形

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

若要安装以下命名空间,请在 Visual Studio 2012 中打开项目,从**“项目”菜单中选择“管理 NuGet 包”**,并联机搜索 Microsoft.Composition 包。

BR230302.collapse_all(zh-cn,VS.110).gif媒体

BR230302.collapse_all(zh-cn,VS.110).gif网络

BR230302.collapse_all(zh-cn,VS.110).gif演示

BR230302.collapse_all(zh-cn,VS.110).gif打印

BR230302.collapse_all(zh-cn,VS.110).gif反射

BR230302.collapse_all(zh-cn,VS.110).gif资源

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

BR230302.collapse_all(zh-cn,VS.110).gif社会

BR230302.collapse_all(zh-cn,VS.110).gif线程处理

BR230302.collapse_all(zh-cn,VS.110).gifUI 自动化

BR230302.collapse_all(zh-cn,VS.110).gif用户交互

BR230302.collapse_all(zh-cn,VS.110).gif语言和编译器

请参见

概念

.NET for Windows Store 应用程序 - 支持的 API

用 C# 和 Visual Basic 创建 Windows 运行时组件

其他资源

.NET Framework 对 Windows 应用商店应用程序和 Windows 运行时的支持情况