Обзор приложений .NET для Магазина Windows

В .NET Framework имеется набор управляемых типов, которые можно использовать для создания приложений Магазина Windows с помощью C# или Visual Basic. Это подмножество управляемых типов называется Приложения .NET для Магазина Windows и позволяет разработчикам .NET Framework для создавать приложения Магазина Windows с использованием привычной платформы программирования. Все типы, не относящихся к разработке приложений Магазина Windows, не входят в это подмножество.

Эти управляемые типы должны использоваться с типами API Среда выполнения Windows для создания приложения Магазина Windows. Как правило, различия между использованием управляемых типов и типов Среда выполнения Windows незаметны, за исключением того, что управляемые типы находятся в пространствах имен, начинающихся с System, а типы Среда выполнения Windows находятся в пространствах имен, начинающихся с Windows. Вместе Приложения .NET для Магазина Windows и Среда выполнения Windows обеспечивают полный набор типов и членов, доступных для разработки приложений Магазина Windows на языках C# или Visual Basic.

Подмножество управляемых типов и членов было разработано с акцентом на разработку приложений Магазина Windows. В результате оно не содержит следующее:

  • типы и члены, неприменимые к разработке приложений Магазина Windows (например, типы консоли и ASP.NET);

  • устаревшие типы;

  • типы, пересекающиеся с типами Среда выполнения Windows;

  • типы и члены, которые обеспечивают оболочку для функций операционной системы (например, System.Diagnostics.EventLog и счетчики производительности);

  • члены, вызывающие путаницу (например, метод Close в типах ввода-вывода).

В некоторых случаях тип, который использовался в приложении рабочего стола .NET Framework, не существует в Приложения .NET для Магазина Windows. Вместо него можно использовать тип из Среда выполнения Windows. Например, класс System.IO.IsolatedStorage.IsolatedStorageSettings не включен в Приложения .NET для Магазина Windows, но класс Windows.Storage.ApplicationDataContainer обеспечивает аналогичную функциональность для хранения параметров приложений. Примеры типовых изменений, которые может потребоваться вносить, описаны в разделе Преобразование существующего кода .NET Framework.

При создании приложения Магазина Windows с помощью C# или Visual Basic в проект автоматически включаются ссылки на весь набор сборок Приложения .NET для Магазина Windows. Поэтому вы можете использовать в проекте любые типы, поддерживаемые Приложения .NET для Магазина Windows, без каких-либо дополнительных действий. Список объединенных пространств имен, входящих в Приложения .NET для Магазина Windows и Среда выполнения Windows (сгруппированный по функциональным областям), представлен в разделе Пространства имен .NET Framework и среды выполнения Windows.

Список пространств имен и типов, входящих в подмножество .NET Framework, см. в разделе Приложения .NET для Магазина Windows — поддерживаемые API.

Также можно создать проект Переносимая библиотека классов для разработки библиотеки .NET Framework, которая может использоваться из приложения Магазина Windows. В качестве одной из целевых платформ проект должен включать .NET для приложений Магазина Windows. Переносимая библиотека классов особенно полезна, когда требуется создавать классы, которые можно использовать из приложений для различных типов платформ, таких как приложения Windows Phone, настольные приложения и приложения Магазина Windows. См. раздел Переносимый общие сведения о библиотеке классов.

В этом разделе содержатся следующие подразделы.

  • Преобразование существующего кода .NET Framework

  • Методы расширения для преобразования типов

  • Пространства имен .NET Framework и среды выполнения Windows

Преобразование существующего кода .NET Framework

Как правило, разработчики не осуществляют простое преобразование имеющегося приложения .NET Framework в приложение Магазина Windows; вместо этого они перерабатывают приложение .NET Framework с учетом новых возможностей пользовательского интерфейса. Однако может потребоваться преобразовать часть имеющегося приложения .NET Framework для ее использования в новом приложении Магазина Windows. При преобразовании существующего кода .NET Framework необходимо помнить о следующих изменениях, которые, возможно, нужно будет внести в приложение Магазина Windows.

  • Изменения пользовательского интерфейса

  • Изменения ввода-вывода

  • Изменения хранилища

  • Изменения сети

  • Изменения в потоках

  • Изменения отражения

  • Изменения системы безопасности

  • Изменения ресурсов

  • Изменения исключений

  • Изменения WCF

  • Изменения в обычных типах .NET Framework

BR230302.collapse_all(ru-ru,VS.110).gifИзменения пользовательского интерфейса

При преобразовании кода пользовательского интерфейса из приложения Silverlight или приложения Windows Phone можно использовать многие похожие типы пользовательского интерфейса, но теперь они находятся в пространстве имен Windows.UI.Xaml, а не в пространстве имен System.Windows. Эти новые типы пользовательского интерфейса аналогичны предыдущим типам пользовательского интерфейса .NET Framework, но содержат ряд других членов.

Заменить

На

Типы пользовательского интерфейса в пространствах имен System.Windows.*

Типы пользовательского интерфейса в пространствах имен Windows.UI.Xaml.*

(например, класс Border находится в пространстве имен Windows.UI.Xaml.Controls)

Дополнительные сведения о переносе кода пользовательского интерфейса см. в разделе Перенос приложения Windows Phone 7 в XAML.

BR230302.collapse_all(ru-ru,VS.110).gifИзменения ввода-вывода

Типы ввода-вывода включают новые члены, поддерживающие новое ключевое слово 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).

Метод Close() в классах ввода-вывода

Метод Dispose() в классах ввода-вывода.

-или-

Объявите и создайте объект ввода-вывода в инструкции using (C#) или Using (Visual Basic), чтобы он правильно удалялся; например:

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

Метод ReadTextAsync в классе Windows.Storage.PathIO

Код для получения и открытия файла

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(ru-ru,VS.110).gifИзменения хранилища

Вместо класса System.IO.IsolatedStorage используйте для хранения локальных данных и файлов типы в пространствах имен Windows.Storage.

Заменить

На

Класс System.IO.IsolatedStorage.IsolatedStorageFile

Свойство LocalFolder класса Windows.Storage.ApplicationData

ApplicationData.Current.LocalFolder

Класс System.IO.IsolatedStorage.IsolatedStorageSettings

Свойство LocalSettings класса Windows.Storage.ApplicationData

ApplicationData.Current.LocalSettings

Дополнительные сведения см. в разделе Данные приложений.

BR230302.collapse_all(ru-ru,VS.110).gifИзменения сети

Заменить

На

Класс System.Net.WebClient

Класс System.Net.Http.HttpClient для отправки HTTP-запросов и получения HTTP-ответов

-или-

Типы в пространстве имен Windows.Networking.BackgroundTransfer для отправки и загрузки больших объемов данных

Типы в пространстве имен System.Net.Sockets

Типы в пространстве имен Windows.Networking.Sockets

Относительные URI при передаче в типы Среда выполнения Windows

Абсолютные URI

Дополнительные сведения см. в разделе Передача URI в среду выполнения Windows.

Код обработки исключения, который перехватывает исключение UriFormatException

Код, который перехватывает исключение FormatException, являющееся родительским классом для UriFormatException

BR230302.collapse_all(ru-ru,VS.110).gifИзменения в потоках

Некоторые члены потоков .NET Framework изменились, и некоторые типы теперь доступны в API Среда выполнения Windows.

Заменить

На

Метод System.Threading.Thread.MemoryBarrier

Метод Interlocked.MemoryBarrier в пространстве имен System.Threading

Свойство System.Threading.Thread.ManagedThreadId

Свойство Environment.CurrentManagedThreadId в пространстве имен System

Свойство System.Threading.Thread.CurrentCulture

Свойство CultureInfo.CurrentCulture в пространстве имен System.Globalization

Свойство System.Threading.Thread.CurrentUICulture

Свойство CultureInfo.CurrentUICulture в пространстве имен System.Globalization

Класс 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(ru-ru,VS.110).gifИзменения отражения

Большинство членов класса System.Type были перемещены в класс System.Reflection.TypeInfo. Объект TypeInfo можно получить, вызвав метод System.Reflection.IntrospectionExtensions.GetTypeInfo(System.Type), который является методом расширения для 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

Дополнительные сведения см. в разделе Отражение в .NET Framework для приложений для Магазина Windows в библиотеке MSDN.

BR230302.collapse_all(ru-ru,VS.110).gifИзменения системы безопасности

Многие типы безопасности, аутентификации и операций шифрования доступны через типы Среда выполнения Windows. Полный список пространств имен безопасности, которые доступны для приложений Магазина Windows, см. в списке пространств имен безопасности далее в этом разделе.

BR230302.collapse_all(ru-ru,VS.110).gifИзменения ресурсов

Для приложений Магазина Windows создается один файл ресурсов, вместо модели "звезда", которая использовалась в настольных приложениях. Кроме того, используйте типы ресурсов в пространствах имен Windows.ApplicationModel.Resources и Windows.ApplicationModel.Resources.Core вместо пространства имен System.Resources.

Дополнительные сведения см. в разделе Создание и извлечение ресурсов в приложениях для Магазина Windows.

BR230302.collapse_all(ru-ru,VS.110).gifИзменения исключений

В некоторых случаях управляемый тип создает исключение, которое не входит в Приложения .NET для Магазина Windows. В этих случаях можно перехватить родительский класс исключения, который не включен. Например, в настольном приложении для обработки недопустимого URI перехватывается исключение UriFormatException; однако в приложении Магазина Windows следует перехватывать исключение FormatException, поскольку UriFormatException не включено в Приложения .NET для Магазина Windows. FormatException является родительским классом для UriFormatException.

BR230302.collapse_all(ru-ru,VS.110).gifИзменения WCF

В приложениях Магазина Windows можно с помощью функциональности клиента Windows Communication Foundation (WCF) извлекать данные из службы WCF, но нельзя создать службу WCF для предоставления данных.

BR230302.collapse_all(ru-ru,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)

Методы расширения для преобразования типов

В большинстве случаев приложения Магазина Windows разрабатываются с использованием и типов .NET Framework, и типов Среда выполнения Windows без каких-либо специальных ограничений и преобразований. Однако в некоторых случаях в .NET Framework имеются методы расширения, упрощающие взаимодействие между типами .NET Framework и типами Среда выполнения Windows. Эти методы расширения принадлежат к следующим классам.

Пространства имен .NET Framework и Среда выполнения Windows

В следующих разделах перечислены пространства имен, предоставляемые в Приложения .NET для Магазина Windows и Среда выполнения Windows, упорядоченные по функциональным возможностям.

BR230302.collapse_all(ru-ru,VS.110).gifКоллекции

BR230302.collapse_all(ru-ru,VS.110).gifЯдро

BR230302.collapse_all(ru-ru,VS.110).gifДанные и содержимое

BR230302.collapse_all(ru-ru,VS.110).gifУстройства

BR230302.collapse_all(ru-ru,VS.110).gifДиагностика

BR230302.collapse_all(ru-ru,VS.110).gifФайлы и папки

BR230302.collapse_all(ru-ru,VS.110).gifГлобализация

BR230302.collapse_all(ru-ru,VS.110).gifГрафика

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

Чтобы установить следующие пространства имен, откройте проект в Visual Studio 2012, выберите в меню Проект пункт Управление пакетами NuGet и найдите в Интернете пакет Microsoft.Composition.

BR230302.collapse_all(ru-ru,VS.110).gifМультимедиа

BR230302.collapse_all(ru-ru,VS.110).gifСеть

BR230302.collapse_all(ru-ru,VS.110).gifПредставление

BR230302.collapse_all(ru-ru,VS.110).gifПечать

BR230302.collapse_all(ru-ru,VS.110).gifОтражение

BR230302.collapse_all(ru-ru,VS.110).gifРесурсы

BR230302.collapse_all(ru-ru,VS.110).gifБезопасность

BR230302.collapse_all(ru-ru,VS.110).gifСоциальные функции

BR230302.collapse_all(ru-ru,VS.110).gifРабота с потоками

BR230302.collapse_all(ru-ru,VS.110).gifАвтоматизация пользовательского интерфейса

BR230302.collapse_all(ru-ru,VS.110).gifВзаимодействие с пользователем

BR230302.collapse_all(ru-ru,VS.110).gifЯзыки и компиляторы

См. также

Основные понятия

Приложения .NET для Магазина Windows — поддерживаемые API

Создание компонентов среды выполнения Windows в C# и Visual Basic

Другие ресурсы

Поддержка приложений для Магазина Windows и среды выполнения Windows в .NET Framework