Презентацию к данной лекции Вы можете скачать здесь.
5.1. Проекты и решения в Visual Studio
Создание программ. При создании программы мы пишем ряд инструкций на языке программирования высокого уровня. При разработке приложений для Windows Phone большинство разработчиков используют язык C#, но все основные принципы и интерфейс для программирования приложений (API — Application Programmer Interface) так же реализуются в языке Visual Basic .NET.
Компилятор — это программа, которая преобразует высокоуровневые инструкции, создаваемые программистом, в инструкции более низкого уровня для выполнения на компьютере. В среде Microsoft .NET компилятор выдает код на промежуточном языке (MSIL), который при запуске программы компилируется в машинный код.
Чтобы создать рабочую программу, нужен, как минимум, файл с исходным кодом программы на языке C# (текстовый файл с расширением .cs) и компилятор. Компилятор преобразует исходный файл в исполняемый файл (двоичный файл с расширением .exe), который может использовать система .NET для выполнения программы на любой платформе. Использование MSIL означает, что один и тот же исполняемый файл можно запускать на разных аппаратных платформах.
.NET SDK. Если вы хотите создавать программы для Windows, но не хотите загружать полную версию Visual Studio, вы можете загрузить компилятор .NET и необходимые библиотеки на сайте http://msdn.microsoft.com/ru-ru/netframework/aa569263.aspx.
При установке .NET Framework можно использовать компилятор, работающий из командной строки, который может преобразовать исходные файлы на C# в исполняемые, используя консольные команды, например:
csc MyProg.cs
Эта команда скомпилирует файл MyProg.cs и создаст файл с именем MyProg.exe. Компилятор командной строки также доступен после установки Visual Studio.
Можно использовать эти инструменты для создания очень больших программ, но это довольно тяжелая работа. Для этого нужно создать большие сложные команды для компилятора, и каждый раз при создании новой версии программы нужно перекомпилировать каждый исходный файл. Кроме этого, нужно самостоятельно управлять всеми дополнительными файлами, которые нужны для работы программы. И когда дело доходит до отладки программы, единственное сообщение, которое выдаст система, — это текстовое сообщение об аварийном завершении работы программы.
Windows Phone SDK. Вам не нужно загружать .NET SDK, если вы хотите создавать приложения Windows Phone с помощью Visual Studio. Для этого нужно только загрузить последнюю версию Windows Phone SDK с сайта http://create.msdn.com.
Windows Phone SDK установит сразу все необходимые инструменты для создания приложений для Windows Phone: интерактивную среду разработки, эмулятор Windows Phone и другие инструменты. Инструменты также можно использовать для создания настольных приложений и игр XNA для компьютеров под управлением Windows и Xbox 360. Если в вашем компьютере установлена другая версия Visual Studio 2010, после установки Windows Phone SDK в нее будут добавлены новые типы проектов и инструменты.
Visual Studio. Visual Studio предоставляет единую среду для создания, редактирования и запуска программ. Она управляет проектами и решениями, которые объединяют все файлы программы, и позволяет управлять их содержимым. Также среда предоставляет инструменты для отладки программ. Visual Studio используется для создания приложений для компьютеров так же, как и для устройств Windows Phone.
После установки Windows Phone SDK значок Microsoft Visual Studio 2010 появится в списке программ.
Среда Visual Studio содержит большое количество кнопок, меню и инструментов, с которыми можно работать. Информацию об их назначении можно получить в справочной системе.
В рамках Visual Studio рассматриваются термины проект и решение. Они используются для организации создаваемых программ и систем. Visual Studio не может запустить любой код программы, который не входит в состав проекта или решения. Для начала можно использовать один из встроенных шаблонов для разных типов проектов.
Простой проект Visual Studio
Проект является контейнером для набора программных файлов и ресурсов, которые создают файл сборки. Самый простой проект содержит единственный файл программы. Можно создать проект, выбрав в главном меню Файл -> Создать проект…. Откроется диалоговое окно Создать проект (рис. 5.1).
(рис 5.1) Диалоговое окно Создать проект
В диалоговом окне Создать проект показан список всех возможных шаблонов проектов, которые поставляются с Visual Studio (на рис. 5.1 представлено окно Visual C# 2010 Express с установленным пакетом XNA Framework SDK, в другой редакции Visual Studio набор проектов может различаться). Шаблон — это заданный набор файлов, папок и ресурсов, который используется в приложениях определенного типа. Также можно создать собственные шаблоны проектов.
Если выбрать шаблон Консольное приложение, Visual Studio создаст минимальный проект, который содержит единственный файл программы с именем Program.cs. Этот файл содержит примерно такой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleProject
{
class Program
{
static void Main(string[] args)
{
}
}
}
Если запустить эту программу, Visual Studio скомпилирует класс Program и затем запустит приложение, вызвав метод Main. Так работают программы на C#. В результате сборки этой программы будет создан файл Program.exe, который является программой для компьютера под управлением Windows.
Создание программы из нескольких исходных файлов. Часто требуется создать программу из нескольких файлов с классами. Это могут быть отдельные файлы или часть библиотеки с кодом на языке C#, созданные другими программистами. В обозревателе решений Visual Studio можно добавить к проекту новый класс, например, Library.cs.
Созданный файл Library.cs теперь является частью проекта, и при построении проекта Visual Studio скомпилирует этот файл вместе с файлом Program.cs. Однако, в результате будет создан единственный исполняемый файл с именем Program.exe. Поэтому только в одном из этих файлов может быть метод Main, иначе компилятор не сможет определить, какой из этих классов должен начать работу. Класс Library изначально будет пустым:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleProject
{
class Library
{
}
}
Можно создать экземпляры этого класса в методе Main:
namespace SimpleProject
{
class Program
{
static void Main(string[] args)
{
Library l = new Library ();
}
}
}
Пространства имен и проекты. Классы Library и Program находятся в пространстве имен SimpleProject. Часто бывает удобно помещать различные части системы в отдельные пространства имен. Это особенно важно, если программы создают разные люди. Если программист, который пишет код библиотеки, решает, что имя Save подходит для создаваемого им метода, другой программист, который работает над другим модулем той же самой программы, также может использовать имя Save и для своего метода.
Пространства имен является логическим способом группирования элементов. У них нет никакой привязки к физическому расположению кода. Можно поместить класс библиотеки в отдельное пространство имен просто, просто изменив его имя:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleLibrary
{
class Library
{
}
}
Класс Library теперь находится в пространстве имен SimpleLibrary. Но попытка собрать проект приведет к возникновению ошибок (рис. 5.2).
(рис 5.2) Окно с информацией об ошибках компиляции программы
Метод Main класса Program пытается создать экземпляр класса Library. Этот класс больше не находится в пространстве имен SimpleProject, и таким образом, возникают ошибки. К счастью, поле Описание списка ошибок подсказывает, что возможно пропущена директива using. Можно решить проблему, добавив директиву using, чтобы указать компилятору на необходимость просмотра пространства имен SimpleLibrary, если нужно найти класс:
using SimpleLibrary;
namespace SimpleProject
{
class Program
{
static void Main(string[] args)
{
Library l = new Library();
}
}
}
Другой способ решения проблемы — использовать полностью определенные имена для получения доступа к ресурсам библиотеки:
SimpleLibrary.Library l = new SimpleLibrary.Library();
Необходимо помнить о том, что мы просто создаем имена элементов в проекте, но не определяем, где они сохраняются. При построении проекта Visual Studio будет просматривать все исходные файлы проекта для поиска необходимых элементов.
Добавление ресурсов в проект
Если программа должна использовать ресурсы (например, изображение для заставки программы), их также нужно добавить в проект. Можно добавить растровое изображение таким же образом, как и новый класс. После добавления изображения оно появится в обозревателе решений (рис. 5.3).
(рис 5.3) Список файлов проекта в обозревателе решений
Теперь решение содержит файл растрового изображения с именем Bitmap1.bmp. Можно выбрать способ управления этим содержимым в Visual Studio, изменив свойства этого объекта.
Свойства ресурсов. Как и у всех объектов, которыми управляет Visual Studio, у ресурсов проекта тоже есть свойства. Можно работать с свойствами ресурсов так же, как и со свойствами других объектов, — используя область свойств (рис. 5.4).
(рис 5.4) Свойства файла изображения
Представленные на рисунке настройки указывают Visual Studio при построении проекта скопировать изображение в тот же каталог, в котором создается файл с программой. В этом случае программа сможет открыть этот файл и использовать его при выполнении программы:
Bitmap b = new Bitmap("Bitmap1.bmp");
Этот код загрузит растровое изображение в переменную b класса Bitmap. Таким образом, можно легко добавлять в проект ресурсы.
Внедрение ресурсов в приложение. В предыдущем примере настройки указывают, чтобы рисунок был сохранен в том же каталоге, что и программа. Этот подход предполагает, что при установке программы файлы с изображениями будут скопированы в папку с исполняемым файлом программы.
Вместо этого можно встроить этот ресурс прямо в файл программы при ее построении. Когда программа будет создана, ее исполняемый файл будет содержать изображение. Это можно сделать, изменив свойства ресурса (рис. 5.5).
(рис 5.5) Свойства изображения, внедряемого в исполняемый файл
Свойству Действие при построении файла Bitmap2.bmp присвоено значение Внедренный ресурс. Теперь изображение сохраняется внутри файла программы. Использовать этот ресурс немного сложнее, но будет гарантировано работать независимо от того, где программа установлена, поскольку при этом не используются дополнительные файлы:
Assembly assembly;
Stream imageStream;
assembly = Assembly.GetExecutingAssembly();
imageStream = assembly.GetManifestResourceStream("SimpleProject.Bitmap2.bmp");
Bitmap b = new Bitmap(imageStream);
Этот код загрузит изображение из встроенного ресурса и сохранит его в переменной b. Обратите внимание, что при получении ресурса из сборки кроме имени ресурса нужно также указать ее пространство имен.
Файлы сборки и исполняемые файлы
При сборке проекта Visual Studio создает не просто программу — выходной объект является сборкой. Сборка является контейнером, в котором могут размещаться различные объекты, включая код программы. При запуске программы среда .NET открывает сборку и ищет класс, содержащий Main, который среда запускает. Файл проекта сообщает Visual Studio, что нужно поместить в сборку.
Сборки библиотек. Существуют два вида сборок — исполняемые файлы и библиотеки. При создании нового проекта можно выбрать шаблон для создания библиотеки. В этом случае будет создан новый проект, который будет содержать только классы библиотеки, т.е. никакой класс в сборке не будет содержать метод Main. Сборка библиотеки компилируется в файл с расширением .dll, что расшифровывается как динамически подключаемая библиотека. Классы библиотеки загружаются в памяти динамически во время работы программы.
Когда программа ссылается на метод класса библиотеке, этот класс будет загружен в память, и JIT-компилятор преобразует метод в машинный код, который сможет выполняться. Если класс вообще не используется, он не загружается в память. Использование динамических библиотек позволяет сохранить память за счет небольшой дополнительной работы при выполнении программы.
Динамические библиотеки можно использовать в других программах без необходимости использования исходного кода этих библиотек.
Системные библиотеки и ссылки. Программа, работающая в среде .NET, во время работы использует системные ресурсы. Если программе нужно отправить сообщение на консоль, она может вызвать для этого метод системы:
System.Console.WriteLine("Hello World");
Эти методы хранятся в системных библиотеках, которые являются DLL-файлами, созданными Microsoft и распространяемыми как часть системы .NET. Файл сборки содержит ссылки на файлы библиотеки, с которыми он работает. Список ссылок можно увидеть в Visual Studio в области обозревателя решений (рис. 5.6).
(рис 5.6) Список ссылок проекта в обозревателе решений
Раздел Ссылки проекта содержит список всех ресурсов, которые использует приложение. При создании проекта определенного типа Visual Studio добавляет ссылки на ресурсы, которые требуются для построения проекта. Этим списком можно управлять самостоятельно. Например, для использования акселерометра в приложении для Windows Phone необходимо добавить ссылку на пространство имен Microsoft.Devices.Sensors.
Отметим, что при добавлении ссылки на ресурс он не обязательно станет частью проекта — сборка должна иметь возможность использовать этот ресурсу при работе. Если ресурс не будет доступен во время выполнения, то произойдет аварийное завершение работы программы. Ресурсы имеют номер версии. Если в систему будет добавлена новая версия библиотеки, любые более старые программы смогут использовать предыдущую версию.
Построение программы. При построении программы Visual Studio собирает все необходимые для построения сборки ресурсы и использует их для создания файла. Полученная сборка сохраняется в виде исполняемого файла в папке, путь к которой задается в настройках приложения. Этот файл также может работать и на другом компьютере с установленной средой .NET. При построении отладочной версии Visual Studio также создает базу данных с отладочной информацией, которая предоставляет информацию об исходном коде.
Решения Visual Studio
Для создания исполняемой сборки достаточно одного проекта. Также Visual Studio позволяет создать несколько отдельных файлов со сборками и использовать их в одном приложении. Файл решения является контейнером, который может содержать проектные файлы. При создании нового проекта фактически создается решение, которое содержит проект.
Создание решения с несколькими проектами. Новые проекты можно добавить к решению, щелкнув правой кнопкой мыши по решению и выбрав во всплывающем меню пункт Добавить -> Создать проект…. В открывшемся окне можно выбрать любой из представленных шаблонов проекта и создать новый проект, который будет являться частью решения (рис. 5.7)
(рис 5.7) Решение Visual Studio с двумя проектами
На рисунке к решению добавлен новый проект библиотеки DisplayLibrary. Библиотека будет скомпилирована в DLL-файл, который будет храниться в папке для этого проекта. Этой библиотекой могут пользоваться любые проекты, которые добавят ссылку на DLL-файл.
Связывание проектов. В настоящее время проекты в нашем решении никак не связаны. Если в проекте SimpleProject нужно использовать ресурсы проекта DisplayLibrary, в первый проект нужно добавить ссылку на второй проект. После этого можно добавить директиву using в исходный код программы:
using DisplayLibrary;
После этого, при построении проекта SimpleProject в каталоге с выходными файлами программы теперь создается еще и DLL-файл проекта DisplayLibrary.
Решения с несколькими проектами. Можно поместить в одно решение несколько проектов разных типов. Например, можно создать игру XNA для Windows Phone, Xbox 360 и компьютера под управлением Windows, используя единственный файл решения. Для каждого из этих устройств можно создать отдельный файл проекта. Игровой движок может быть реализован в четвертом проекте, который нужно использовать в остальных проектах.
Можно создать приложение Silverlight, которое подключается к веб-службе; при этом можно поместить и проект приложения Silverlight и проект веб-службы в одно решение.
Проекты решения и выполняемые ими задачи должны быть определены в начале разработки. Если решение содержит несколько проектов, можно назначить один из них запускаемым проектом, который будет выполняться первым при запуске проекта.
Решения Windows Phone
Существует много видов решений для Windows Phone, которые можно создать в Visual Studio: приложение Silverlight, приложение XNA и приложение, использующее совместно Silverlight и XNA. Также есть проекты для создания дополнительных элементов решений Windows Phone, например, фоновые задачи.
Решение Silverlight для Windows Phone. Решение для Windows Phone, содержащее проект приложения на Silverlight, может иметь структуру, представленную на рис. 5.8.
(рис 5.8) Структура проекта приложения Silverlight для Windows Phone
Решение Silverlight для Windows Phone содержит файл MainPage.xaml, который описывает внешний вид главного экрана. Также оно содержит изображения, которые используются для вывода на экран значка приложения и заставки, которыми будет управлять программа. Если добавить новые страницы к приложению Silverlight, то они будут добавлены к проекту в виде XAML-файлов и файлов отделенного кода. Проект также содержит ссылки на все системные библиотеки, которые использует телефон.
Решение XNA для Windows Phone. Технология XNA Framework создана для того, чтобы создавать игры. Она предоставляет целый игровой движок, в который можно поместить свою игру и добавить внешний вид. Она позволяет управлять ресурсами и легко добавлять в игру изображения, текстуры и звуки.
При создании решения XNA, используя шаблон Visual Studio, фактически создается сразу два проекта (рис. 5.9). Один из них содержит исполняемый код, а другой содержит все используемые игрой ресурсы. Идея состоит в том что, если игра должна работать на нескольких платформах, достаточно просто добавить к решению новые проекты. Они могут совместно использовать один проект ресурсов.
(рис 5.9) Решение игры XNA для Windows Phone
На рисунке представлено решение новой игры XNA. Если добавить в проект ресурсы, например, изображения, то они будут сохранены в проекте ресурсов WindowsPhoneGameContent, который может использовать любой проект игры в этом решении.
Совместное использование Silverlight и XNA. Решение, совместно использующее XNA и Silverlight, содержит три проекта (рис. 5.10). Проект Silverlight фактически содержит приложение игры XNA, работающей на одной из страниц приложения Silverlight. Однако, решению нужна библиотека компонентов XNA, а также проект ресурсов XNA. Visual Studio автоматически создает все необходимые проекты, их нужно просто заполнить кодом.
(рис 5.10) Решение игры XNA для Windows Phone
Создание решения Windows Phone
Процесс создания приложений для Windows Phone такой же, как и создание консольных приложений. При выборе шаблона Visual Studio создает проекты и исходные файлы, соответствующие этому шаблону.
Для создания нового проекта в меню Visual Studio нужно выбрать Файл -> Создать проект…. Откроется диалоговое окно Создать проект (рис. 5.11).
(рис 5.11) Список шаблонов проектов приложений Silverlight для Windows Phone
В левой части диалогового окна отображается список всех доступных проектов. Если в системе установлен Windows Phone SDK, в этом списке будут пункты Silverlight for Windows Phone и XNA Game Studio 4.0. В центральной части окна отображается список доступных проектов для выбранной группы.
Также можно использовать шаблон для создания проекта, который нужно добавить к существующему приложению Windows Phone. Например, можно добавить Агент запланированных заданий Windows Phone. Этот проект позволяет добавить запланированную задачу к приложению, чтобы она могла выполнять работу с некоторым интервалом времени, когда пользователь не использует приложение.
Для начала попробуем создать простое приложение на основе шаблона Приложение Windows Phone. Можно создать такое же приложение и без использования шаблона — просто создав проекты и исходные файлы и корректируя их настройки — но шаблоны упрощают этот процесс.
В нижней части окна нужно ввести имя приложения. Рекомендуется оставить установленным флажок Создать каталог для решения — в этом случае Visual Studio создаст папку с именем приложением и поместит в нее все файлы решения и папки проекта.
При нажатии на кнопку OK Visual Studio спросит, для какой версии платформы нужно создать приложение (рис. 5.12).
(рис 5.12) Список доступных версий операционной системы Windows Phone
Первая версия Windows Phone называлась Windows Phone 7. Последняя на текущий момент версия Windows Phone имеет номер 7.5, но в инструментальных средствах и в операционной системе эта версия имеет номер 7.1. Это может вызвать некоторую путаницу, однако можно привести следующее объяснение:
ОС Windows Phone 7.0 — оригинальная версия телефона с ограниченным набором функций. Однако этот набор функций доступен во всех телефонах;
ОС Windows Phone 7.1 — обновленная версия, которая включает новые функции, доступные только в телефонах последней версии Windows Phone.
Многие из разделов этого курса используют новые возможности Windows Phone 7.5 (работающий под управлением операционной системы Windows Phone 7.1), поэтому необходимо выбрать пункт ОС Windows Phone 7.1.
Visual Studio создаст пустое рабочее приложение Windows Phone Silverlight. В него можно добавить визуальные элементы и поведение. В пустом рабочем приложении Silverlight среди прочих содержатся четыре файла: App.xaml и App.xaml.cs, MainPage.xaml и MainPage.xaml.cs. Файлы App.xaml и MainPage.xaml — это файлы XAML, тогда как App.xaml.cs и MainPage.xaml.cs — это файлы C#. Такой принцип именования файлов подразумевает, что два файла C#-кода являются файлами отделенного кода, связанными с двумя XAML-файлами. Они содержат код для поддержки разметки. Это основная концепция Silverlight.
Запуск приложений Windows Phone
Для того чтобы начать процесс компиляции приложения в Visual Studio нужно просто нажать клавишу F5 на клавиатуре или выбрать в главном меню пункт Отладка -> Начать отладку. Visual Studio создаст сборку, добавит в нее все необходимые для работы программы ресурсы и запустит программу.
В отличие от компиляции и построения приложения для Windows тот же процесс для приложений для Windows Phone является более сложным. Программа не запустится на компьютере — вместо этого ее нужно передать в устройство Windows Phone или эмулятор. Кроме того, любые ресурсы, необходимые для работы программы (например, ресурсы, которые не встроены в сборку), должны быть доступны программе в целевом устройстве. Эта проблема решается путем использования контейнерного файла, в который размещается само приложение и все необходимые ресурсы.
На рис. 5.13 представлен выходной каталог для программы Сумматор. В нем содержатся все ресурсы и файл AddingMachine.dll с кодом программы. Среди прочих файлов присутствует файл с расширением XAP — этот файл является контейнером, который содержит все приложение.
(рис 5.13) Список файлов программы, созданных в результате компиляции проекта
XAP-файл. Файл XAP является архивным файлом (его формат такой же, как и у ZIP-файлов), который содержит все файлы приложения.
На рис. 5.14 представлено содержимое XAP-файла для приложения Сумматор. Этот файл нужно передать в устройство Windows Phone, где он должен работать. При запуске приложения на выполнение в Visual Studio этот файл создается и передается в устройство или эмулятор. Целевое устройство распаковывает этот файл и запускает приложение. Если программа состоит из нескольких библиотек и содержит изображения и звуковые файлы, все они будут помещены в XAP-файл.
(рис 5.14) Список файлов программы, которые размещаются в XAP-файле
Таким образом, вся программа для Windows Phone представляется в виде XAP-файла, который должен быть загружен в телефон.
5.2. Отладка программ
Отладка является важным этапом создания приложений. Среда проектирования приложений для Windows Phone позволяет легко отлаживать программы. При отладке можно просмотреть значения переменных на любом шаге и получить представление о том, насколько правильно работает программа. Программы можно отлаживать на физическом устройстве или в эмуляторе.
Использование эмулятора Windows Phone
Эмулятор Windows Phone дает возможность проверить правильность работы программ. Эмулятор работает так же, как и физическое устройство.
Можно развернуть программу в эмуляторе или в физическом устройстве. Выбрать физическое устройство или эмулятор для выполнения программы можно с помощью раскрывающегося списка справа от кнопки запуска программы (рис. 5.15).
(рис 5.15) Список целевых устройств, которые можно использовать для запуска программы
Если выбрать пункт Windows Phone Device, и при этом физическое устройство не будет подключено, при попытке выполнения программы Visual Studio выдаст ошибку.
В эмуляторе Windows Phone можно использовать мышь для щелчка по элементам. Если в компьютере есть мультисенсорный монитор и операционная система Windows 7, можно использовать мультисенсорные функции пользовательского интерфейса.
Чтобы остановить выполнение программы, нужно нажать на кнопку эмулятора Назад (кнопка со стрелкой влево) или закрыть окно эмулятора.
В состав эмулятора входят не все встроенные программы, которые есть в физическом устройстве. Среди встроенных функций присутствуют только программа Internet Explorer, возможность изменения некоторых настроек системы, включая доступные языки клавиатуры телефона, и эмуляция некоторых функций устройства, а такие программы как Калькулятор, Календарь и интерфейс Zune отсутствуют.
Эмулятор не может работать с такой же скоростью как аппаратные средства Windows Phone. Фактическая скорость приложения ограничена в эмуляторе так, чтобы эмулятор в некоторой степени соответствовал физическому устройству. Однако, имеет смысл предварительно запустить разрабатываемое приложение в физическом устройстве, чтобы определить, как оно будет работать на самом деле.
Когда Visual Studio развертывает приложение в эмуляторе Windows Phone, оно остается там, пока эмулятор не будет перезагружен. Приложение можно запустить повторно, щелкнув по его значку.
Отладчик Visual Studio
Функции отладчика интегрированы в среду Visual Studio. Можно запускать программы прямо в Visual Studio. Можно добавить в программу точки останова. Когда программа дойдет до точки останова, Visual Studio приостановит отладку программы и позволит просмотреть значения переменных в коде программы. Можно добавлять точки останова и при отладке программ, работающих на физическом устройстве. Можно даже устанавливать и удалять контрольные точки, во время работы программы.
Добавление точки останова. Точки останова добавляются одинаково при создании любой программы в Visual Studio: нужно щелкнуть мышью в левом поле напротив строки, в которой нужно установить точку останова. При этом, строка будет выделена цветом. Повторное нажатие в поле уберет точку останова. Когда программа дойдет до этой строки, ее работа приостановится, и можно будет просмотреть значения переменных перед выполнением команды в выделенной строке. Для этого можно навести указатель мыши на нужную переменную в коде программы.
Пошаговое выполнение программы. Можно выполнить одну строку программы, нажав клавишу F11 или аналогичную кнопку на панели инструментов. Каждый раз при нажатии на эту кнопку программа выполнит одну строку кода программы и перейдет к следующей.
Пошаговое выполнение программы осуществляют три клавиши клавиатуры (или аналогичные кнопки на панели инструментов):
F11 — выполнение одной строки программы. Если эта строка будет методом, отладчик выполнит одну строку этого метода. Это действие называется "шаг с заходом";
F10 — выполнение одной строки программы. Если эта строка будет методом, отладчик выполнит метод целиком. Это действие называется "шаг с обходом". Эта возможность позволяет не выполнять пошаговую отладку метода;
Shift + F11 — выполнение всех действий программы до конца текущего метода и выход из него. Это действие называется "шаг с выходом".
Управление выполнением программы
Visual Studio поддерживает связь с работающей в устройстве программой. Отладчик позволяет управлять выполнением программы.
Запуск или возобновление выполнения программы. Для того чтобы запустить программу или продолжить ее выполнение после остановки нужно нажать клавишу F5.
Приостановка выполнения программы. Приостановить выполнение программы полезно, если программа выполняется дольше, чем ожидается, и есть подозрение, что программа "зависла". Чтобы приостановить выполнение программы, нужно нажать клавиши Ctrl + Alt + Break. Также для приостановки выполнения программы можно установить точки останова.
Остановка программы. Клавиши Shift + F5 можно использовать для прекращения работы программы после выполнения текущей операции. Остановку программы нужно использовать с осторожностью, поскольку существует опасность потери или повреждения данных, с которыми работает программа.
Управление точками останова. В Visual Studio есть окно со списком точек останова в программе. Его можно вызвать, выбрав в главном меню пункт Отладка -> Окна -> Точки останова. В этом окне можно установить свойства точки остановки. Можно указать, чтобы точка останова срабатывала после определенного количества заходов, или при выполнении определенного условия. Это полезно в случае, например, если программа завершается неудачей после пятидесятой итерации цикла.
Окно интерпретации. Окно интерпретации можно вызвать, выбрав в главном меню пункт Отладка -> Окна -> Интерпретация. В этом окне можно просмотреть и изменить значения переменных, а также получить значение произвольного выражения.
Краткие итоги
Среда проектирования Visual Studio используется для создания приложений для Windows Phone. Существует бесплатная версия этого инструмента.
Приложения Microsoft .NET состоят из сборок. Сборка может быть исполняемой программой (.exe) или библиотекой (.dll).
Visual Studio объединяет необходимые для создания сборки элементы в проект. В проект включаются исходные файлы и другие ресурсы программы, такие как изображения и звуки.
Решение Visual Studio объединяет несколько проектов. Проекты могут представлять отдельные компоненты большой системы, например серверная и клиентская части приложения.
Приложения Windows Phone могут содержать несколько сборок, включая ресурсы библиотек. Сборка будет содержать ссылки на все используемые ресурсы с указанием их версий.
Приложение Windows Phone перед развертыванием на целевое устройство упаковываются в файл XAP, который содержит сборки программы и все используемые программой ресурсы.
Эмулятор Windows Phone работает на компьютере под управлением Windows и предоставляет эмуляцию функциональности устройства.
Visual Studio предоставляет возможность добавления в программу точек останова, в которых выполнение программы приостанавливается, и программист может просмотреть значения переменных в программе. Точки останова и пошаговое выполнение программы могут использоваться при выполнении программ в физическом устройстве или эмуляторе Windows Phone.
Вопросы
Как можно создать на основе файлов исходного кода программы исполняемый файл?
Как в Visual Studio создать новую программу?
Что такое "пространство имен"?
Как совместно использовать несколько проектов?
Каким образом можно добавить в проект ресурсы?
Что такое "динамическая библиотека"?
Что такое "построение программы"?
Чем отличается термин "решение" от термина "проект"?
Какие типы решений и проектов приложений для Windows Phone поставляются с Windows Phone SDK?
Что представляют собой файлы с расширением .xap?
Как в Visual Studio запустить отладку приложения в эмуляторе Windows Phone?
Какие средства Visual Studio позволяют осуществлять отладку приложений?
Упражнения
Упражнение 1. Создание приложения Калькулятор времени
В этом упражнении вы создадите приложение Калькулятор времени, описанное в упражнении к предыдущей лекции.
Создание пустого приложения Silverlight
Запустите Visual Studio с установленным Windows Phone SDK.
В главном меню выберите пункт Файл -> Создать проект…. Откроется диалоговое окно Создать проект.
В списке установленных шаблонов выберите Silverlight for Windows Phone.
В центральной части окна выберите Приложение Windows Phone.
В нижней части окна в поле Имя введите TimeCalculator.
Выберите подходящий каталог для проекта. По умолчанию Visual Studio поместит проект в папку Visual Studio 2010 \ Projects в папке Документы.
Убедитесь, что флажок Создать каталог для решения установлен, и нажмите OK, чтобы создать новое приложение.
Visual Studio попросит выбрать целевую платформу для нового приложения. Выберите ОС Windows Phone 7.1 и нажмите OK. Visual Studio создаст новое приложение в указанном местоположении.
Нажмите клавишу F5, чтобы запустить пустую программу. Запустится эмулятор Windows Phone (если он еще не был запущен), и приложение будет выполняться в эмуляторе.
Щелкните по окну Visual Studio, чтобы его выбрать. Нажмите клавиши Shift + F5, чтобы остановить выполнение программы. Также можно остановить программу, нажав кнопку Назад в эмуляторе Windows Phone.
Добавление элементов Silverlight
Убедитесь, что в Visual Studio открыто окно MainPage.xaml. Слева находится окно дизайнера (оно похоже на Windows Phone), в центре — код XAML, справа — обозреватель решений. (Указанные области могут располагаться в окне Visual Studio по-другому.)
Измените текст имя страницы в элементе PageTitle на TimeCalculator.
Измените текст МОЕ ПРИЛОЖЕНИЕ в элементе ApplicationTitle на ваше имя.
В главном меню выберите пункт Вид -> Панель элементов, чтобы отобразить на экране панель инструментов с доступными элементами. Элементы можно перетаскивать с панели инструментов в окно дизайнера.
Добавьте следующие элементы пользовательского интерфейса в окно дизайнера приложения и задайте их имена, как указано в таблице:
| Назначение элемента | Тип элемента | Имя элемента |
| Часы времени начала | TextBox | startHourTextBox |
| Минуты времени начала | TextBox | startMinTextBox |
| Часы времени окончания | TextBox | endHourTextBox |
| Минуты времени окончания | TextBox | endMinTextBox |
| Кнопка для вычисления | Кнопка | calcButton |
| Результат | TextBlock | resultTextBlock |
Можно также добавить дополнительные элементы TextBlock, чтобы разместить в окне приложения пояснительный текст.
Настройте свойства добавленных элементов, чтобы приложение выглядело приблизительно таким образом (рекомендуется установить размер текста элементов TextBlock равным 25):
Запустите программу. Обратите внимание, что можно вводить текст в текстовые поля и нажимать на кнопку.
Добавление поведения в приложение
В обозревателе решений откройте файл MainPage.xaml.cs.
Добавьте после конструктора MainPage следующее описание метода calculateMinutes:
private void calculateMinutes()
{
// здесь нужно будет добавить проверку данных и обработку исключений
int startMin = int.Parse(startMinTextBox.Text);
int startHour = int.Parse(startHourTextBox.Text);
int endMin = int.Parse(endMinTextBox.Text);
int endHour = int.Parse(endHourTextBox.Text);
// здесь нужно будет добавить код для вычисления времени
int result = 99;
resultTextBlock.Text = "Результат: " + result.ToString();
}
Вернитесь в окно редактора файла MainPage.xaml.
Дважды щелкните мышью по кнопке вычислить. Visual Studio создаст обработчик нажатия на кнопку и откроет код обработчика, созданный в файле MainPage.xaml.cs.
private void calcButton_Click(object sender, RoutedEventArgs e)
{
}
Добавьте вызов метода calculateMinutes в этот метод-обработчик.
Запустите программу. Обратите внимание, что при нажатии на кнопку значение результата изменяется на 99.
Завершение создания приложения
В редакторе кода XAML добавьте во все текстовые поля следующий атрибут:
InputScope="Number"
Это укажет Windows Phone, что в текстовые поля будут вводиться числа.
Добавьте в метод calculateMinutes код для вычисления разности времени между введенными моментами времени (создайте код самостоятельно).
Запустите программу и проверьте правильность ее работы.
Упражнение 2. Отладка приложения
В этом упражнении вы выполните отладку приложения Калькулятор времени, которое создал другой программист. Программа иногда выдает неправильные результаты. Необходимо выполнить отладку программы, чтобы обнаружить проблему.
Откройте проект TimeCalculator, который находится в папке Lab3 TimeCalculator.
Выполните программу. Введите значения Начало: 00:00 и Окончание: 01:00.
Нажмите кнопку вычислить. Обратите внимание, что программа выводит на экран 60 минут, что является правильным результатом.
Введите значения Начало: 00:00 и Окончание: 01:30.
Нажмите кнопку вычислить. Обратите внимание, что программа выводит на экран 60 минут, что является неверным результатом.
Во время работы программы откройте исходный файл MainPage.xaml.cs в обозревателе решений.
Установите точку останова в следующей строке, щелкнув в поле слева от этой строки:
resultTextBlock.Text = "Результат: " + result.ToString();
Нажмите кнопку вычислить еще раз. Теперь программа должна приостановить работу в этой строке.
Просмотрите значения переменных. Попробуйте установить причину возникающей проблемы. Если вы не можете обнаружить ошибку, выполните следующий шаг.
Нажмите клавишу F5 для возобновления программы. Введите значения Начало: 01:02 и Окончание: 03:04. Теперь используйте отладчик, чтобы просмотреть значения переменных startHour, startMin, endHour и endMin.
Определите и исправьте причину ошибок.
Удалите контрольную точку, щелкнув мышью в левом поле еще раз, и проверьте правильность работы программы на тестовых данных.
Презентацию к данной лекции Вы можете скачать здесь.
5.1. Проекты и решения в Visual Studio
Создание программ. При создании программы мы пишем ряд инструкций на языке программирования высокого уровня. При разработке приложений для Windows Phone большинство разработчиков используют язык C#, но все основные принципы и интерфейс для программирования приложений (API — Application Programmer Interface) так же реализуются в языке Visual Basic .NET.
Компилятор — это программа, которая преобразует высокоуровневые инструкции, создаваемые программистом, в инструкции более низкого уровня для выполнения на компьютере. В среде Microsoft .NET компилятор выдает код на промежуточном языке (MSIL), который при запуске программы компилируется в машинный код.
Чтобы создать рабочую программу, нужен, как минимум, файл с исходным кодом программы на языке C# (текстовый файл с расширением .cs) и компилятор. Компилятор преобразует исходный файл в исполняемый файл (двоичный файл с расширением .exe), который может использовать система .NET для выполнения программы на любой платформе. Использование MSIL означает, что один и тот же исполняемый файл можно запускать на разных аппаратных платформах.
.NET SDK. Если вы хотите создавать программы для Windows, но не хотите загружать полную версию Visual Studio, вы можете загрузить компилятор .NET и необходимые библиотеки на сайте http://msdn.microsoft.com/ru-ru/netframework/aa569263.aspx.
При установке .NET Framework можно использовать компилятор, работающий из командной строки, который может преобразовать исходные файлы на C# в исполняемые, используя консольные команды, например:
csc MyProg.cs
Эта команда скомпилирует файл MyProg.cs и создаст файл с именем MyProg.exe. Компилятор командной строки также доступен после установки Visual Studio.
Можно использовать эти инструменты для создания очень больших программ, но это довольно тяжелая работа. Для этого нужно создать большие сложные команды для компилятора, и каждый раз при создании новой версии программы нужно перекомпилировать каждый исходный файл. Кроме этого, нужно самостоятельно управлять всеми дополнительными файлами, которые нужны для работы программы. И когда дело доходит до отладки программы, единственное сообщение, которое выдаст система, — это текстовое сообщение об аварийном завершении работы программы.
Windows Phone SDK. Вам не нужно загружать .NET SDK, если вы хотите создавать приложения Windows Phone с помощью Visual Studio. Для этого нужно только загрузить последнюю версию Windows Phone SDK с сайта http://create.msdn.com.
Windows Phone SDK установит сразу все необходимые инструменты для создания приложений для Windows Phone: интерактивную среду разработки, эмулятор Windows Phone и другие инструменты. Инструменты также можно использовать для создания настольных приложений и игр XNA для компьютеров под управлением Windows и Xbox 360. Если в вашем компьютере установлена другая версия Visual Studio 2010, после установки Windows Phone SDK в нее будут добавлены новые типы проектов и инструменты.
Visual Studio. Visual Studio предоставляет единую среду для создания, редактирования и запуска программ. Она управляет проектами и решениями, которые объединяют все файлы программы, и позволяет управлять их содержимым. Также среда предоставляет инструменты для отладки программ. Visual Studio используется для создания приложений для компьютеров так же, как и для устройств Windows Phone.
После установки Windows Phone SDK значок Microsoft Visual Studio 2010 появится в списке программ.
Среда Visual Studio содержит большое количество кнопок, меню и инструментов, с которыми можно работать. Информацию об их назначении можно получить в справочной системе.
В рамках Visual Studio рассматриваются термины проект и решение. Они используются для организации создаваемых программ и систем. Visual Studio не может запустить любой код программы, который не входит в состав проекта или решения. Для начала можно использовать один из встроенных шаблонов для разных типов проектов.
Простой проект Visual Studio
Проект является контейнером для набора программных файлов и ресурсов, которые создают файл сборки. Самый простой проект содержит единственный файл программы. Можно создать проект, выбрав в главном меню Файл -> Создать проект…. Откроется диалоговое окно Создать проект (рис. 5.1).
(рис 5.1) Диалоговое окно Создать проект
В диалоговом окне Создать проект показан список всех возможных шаблонов проектов, которые поставляются с Visual Studio (на рис. 5.1 представлено окно Visual C# 2010 Express с установленным пакетом XNA Framework SDK, в другой редакции Visual Studio набор проектов может различаться). Шаблон — это заданный набор файлов, папок и ресурсов, который используется в приложениях определенного типа. Также можно создать собственные шаблоны проектов.
Если выбрать шаблон Консольное приложение, Visual Studio создаст минимальный проект, который содержит единственный файл программы с именем Program.cs. Этот файл содержит примерно такой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleProject
{
class Program
{
static void Main(string[] args)
{
}
}
}
Если запустить эту программу, Visual Studio скомпилирует класс Program и затем запустит приложение, вызвав метод Main. Так работают программы на C#. В результате сборки этой программы будет создан файл Program.exe, который является программой для компьютера под управлением Windows.
Создание программы из нескольких исходных файлов. Часто требуется создать программу из нескольких файлов с классами. Это могут быть отдельные файлы или часть библиотеки с кодом на языке C#, созданные другими программистами. В обозревателе решений Visual Studio можно добавить к проекту новый класс, например, Library.cs.
Созданный файл Library.cs теперь является частью проекта, и при построении проекта Visual Studio скомпилирует этот файл вместе с файлом Program.cs. Однако, в результате будет создан единственный исполняемый файл с именем Program.exe. Поэтому только в одном из этих файлов может быть метод Main, иначе компилятор не сможет определить, какой из этих классов должен начать работу. Класс Library изначально будет пустым:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleProject
{
class Library
{
}
}
Можно создать экземпляры этого класса в методе Main:
namespace SimpleProject
{
class Program
{
static void Main(string[] args)
{
Library l = new Library ();
}
}
}
Пространства имен и проекты. Классы Library и Program находятся в пространстве имен SimpleProject. Часто бывает удобно помещать различные части системы в отдельные пространства имен. Это особенно важно, если программы создают разные люди. Если программист, который пишет код библиотеки, решает, что имя Save подходит для создаваемого им метода, другой программист, который работает над другим модулем той же самой программы, также может использовать имя Save и для своего метода.
Пространства имен является логическим способом группирования элементов. У них нет никакой привязки к физическому расположению кода. Можно поместить класс библиотеки в отдельное пространство имен просто, просто изменив его имя:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleLibrary
{
class Library
{
}
}
Класс Library теперь находится в пространстве имен SimpleLibrary. Но попытка собрать проект приведет к возникновению ошибок (рис. 5.2).
(рис 5.2) Окно с информацией об ошибках компиляции программы
Метод Main класса Program пытается создать экземпляр класса Library. Этот класс больше не находится в пространстве имен SimpleProject, и таким образом, возникают ошибки. К счастью, поле Описание списка ошибок подсказывает, что возможно пропущена директива using. Можно решить проблему, добавив директиву using, чтобы указать компилятору на необходимость просмотра пространства имен SimpleLibrary, если нужно найти класс:
using SimpleLibrary;
namespace SimpleProject
{
class Program
{
static void Main(string[] args)
{
Library l = new Library();
}
}
}
Другой способ решения проблемы — использовать полностью определенные имена для получения доступа к ресурсам библиотеки:
SimpleLibrary.Library l = new SimpleLibrary.Library();
Необходимо помнить о том, что мы просто создаем имена элементов в проекте, но не определяем, где они сохраняются. При построении проекта Visual Studio будет просматривать все исходные файлы проекта для поиска необходимых элементов.
Добавление ресурсов в проект
Если программа должна использовать ресурсы (например, изображение для заставки программы), их также нужно добавить в проект. Можно добавить растровое изображение таким же образом, как и новый класс. После добавления изображения оно появится в обозревателе решений (рис. 5.3).
(рис 5.3) Список файлов проекта в обозревателе решений
Теперь решение содержит файл растрового изображения с именем Bitmap1.bmp. Можно выбрать способ управления этим содержимым в Visual Studio, изменив свойства этого объекта.
Свойства ресурсов. Как и у всех объектов, которыми управляет Visual Studio, у ресурсов проекта тоже есть свойства. Можно работать с свойствами ресурсов так же, как и со свойствами других объектов, — используя область свойств (рис. 5.4).
(рис 5.4) Свойства файла изображения
Представленные на рисунке настройки указывают Visual Studio при построении проекта скопировать изображение в тот же каталог, в котором создается файл с программой. В этом случае программа сможет открыть этот файл и использовать его при выполнении программы:
Bitmap b = new Bitmap("Bitmap1.bmp");
Этот код загрузит растровое изображение в переменную b класса Bitmap. Таким образом, можно легко добавлять в проект ресурсы.
Внедрение ресурсов в приложение. В предыдущем примере настройки указывают, чтобы рисунок был сохранен в том же каталоге, что и программа. Этот подход предполагает, что при установке программы файлы с изображениями будут скопированы в папку с исполняемым файлом программы.
Вместо этого можно встроить этот ресурс прямо в файл программы при ее построении. Когда программа будет создана, ее исполняемый файл будет содержать изображение. Это можно сделать, изменив свойства ресурса (рис. 5.5).
(рис 5.5) Свойства изображения, внедряемого в исполняемый файл
Свойству Действие при построении файла Bitmap2.bmp присвоено значение Внедренный ресурс. Теперь изображение сохраняется внутри файла программы. Использовать этот ресурс немного сложнее, но будет гарантировано работать независимо от того, где программа установлена, поскольку при этом не используются дополнительные файлы:
Assembly assembly;
Stream imageStream;
assembly = Assembly.GetExecutingAssembly();
imageStream = assembly.GetManifestResourceStream("SimpleProject.Bitmap2.bmp");
Bitmap b = new Bitmap(imageStream);
Этот код загрузит изображение из встроенного ресурса и сохранит его в переменной b. Обратите внимание, что при получении ресурса из сборки кроме имени ресурса нужно также указать ее пространство имен.
Файлы сборки и исполняемые файлы
При сборке проекта Visual Studio создает не просто программу — выходной объект является сборкой. Сборка является контейнером, в котором могут размещаться различные объекты, включая код программы. При запуске программы среда .NET открывает сборку и ищет класс, содержащий Main, который среда запускает. Файл проекта сообщает Visual Studio, что нужно поместить в сборку.
Сборки библиотек. Существуют два вида сборок — исполняемые файлы и библиотеки. При создании нового проекта можно выбрать шаблон для создания библиотеки. В этом случае будет создан новый проект, который будет содержать только классы библиотеки, т.е. никакой класс в сборке не будет содержать метод Main. Сборка библиотеки компилируется в файл с расширением .dll, что расшифровывается как динамически подключаемая библиотека. Классы библиотеки загружаются в памяти динамически во время работы программы.
Когда программа ссылается на метод класса библиотеке, этот класс будет загружен в память, и JIT-компилятор преобразует метод в машинный код, который сможет выполняться. Если класс вообще не используется, он не загружается в память. Использование динамических библиотек позволяет сохранить память за счет небольшой дополнительной работы при выполнении программы.
Динамические библиотеки можно использовать в других программах без необходимости использования исходного кода этих библиотек.
Системные библиотеки и ссылки. Программа, работающая в среде .NET, во время работы использует системные ресурсы. Если программе нужно отправить сообщение на консоль, она может вызвать для этого метод системы:
System.Console.WriteLine("Hello World");
Эти методы хранятся в системных библиотеках, которые являются DLL-файлами, созданными Microsoft и распространяемыми как часть системы .NET. Файл сборки содержит ссылки на файлы библиотеки, с которыми он работает. Список ссылок можно увидеть в Visual Studio в области обозревателя решений (рис. 5.6).
(рис 5.6) Список ссылок проекта в обозревателе решений
Раздел Ссылки проекта содержит список всех ресурсов, которые использует приложение. При создании проекта определенного типа Visual Studio добавляет ссылки на ресурсы, которые требуются для построения проекта. Этим списком можно управлять самостоятельно. Например, для использования акселерометра в приложении для Windows Phone необходимо добавить ссылку на пространство имен Microsoft.Devices.Sensors.
Отметим, что при добавлении ссылки на ресурс он не обязательно станет частью проекта — сборка должна иметь возможность использовать этот ресурсу при работе. Если ресурс не будет доступен во время выполнения, то произойдет аварийное завершение работы программы. Ресурсы имеют номер версии. Если в систему будет добавлена новая версия библиотеки, любые более старые программы смогут использовать предыдущую версию.
Построение программы. При построении программы Visual Studio собирает все необходимые для построения сборки ресурсы и использует их для создания файла. Полученная сборка сохраняется в виде исполняемого файла в папке, путь к которой задается в настройках приложения. Этот файл также может работать и на другом компьютере с установленной средой .NET. При построении отладочной версии Visual Studio также создает базу данных с отладочной информацией, которая предоставляет информацию об исходном коде.
Решения Visual Studio
Для создания исполняемой сборки достаточно одного проекта. Также Visual Studio позволяет создать несколько отдельных файлов со сборками и использовать их в одном приложении. Файл решения является контейнером, который может содержать проектные файлы. При создании нового проекта фактически создается решение, которое содержит проект.
Создание решения с несколькими проектами. Новые проекты можно добавить к решению, щелкнув правой кнопкой мыши по решению и выбрав во всплывающем меню пункт Добавить -> Создать проект…. В открывшемся окне можно выбрать любой из представленных шаблонов проекта и создать новый проект, который будет являться частью решения (рис. 5.7)
(рис 5.7) Решение Visual Studio с двумя проектами
На рисунке к решению добавлен новый проект библиотеки DisplayLibrary. Библиотека будет скомпилирована в DLL-файл, который будет храниться в папке для этого проекта. Этой библиотекой могут пользоваться любые проекты, которые добавят ссылку на DLL-файл.
Связывание проектов. В настоящее время проекты в нашем решении никак не связаны. Если в проекте SimpleProject нужно использовать ресурсы проекта DisplayLibrary, в первый проект нужно добавить ссылку на второй проект. После этого можно добавить директиву using в исходный код программы:
using DisplayLibrary;
После этого, при построении проекта SimpleProject в каталоге с выходными файлами программы теперь создается еще и DLL-файл проекта DisplayLibrary.
Решения с несколькими проектами. Можно поместить в одно решение несколько проектов разных типов. Например, можно создать игру XNA для Windows Phone, Xbox 360 и компьютера под управлением Windows, используя единственный файл решения. Для каждого из этих устройств можно создать отдельный файл проекта. Игровой движок может быть реализован в четвертом проекте, который нужно использовать в остальных проектах.
Можно создать приложение Silverlight, которое подключается к веб-службе; при этом можно поместить и проект приложения Silverlight и проект веб-службы в одно решение.
Проекты решения и выполняемые ими задачи должны быть определены в начале разработки. Если решение содержит несколько проектов, можно назначить один из них запускаемым проектом, который будет выполняться первым при запуске проекта.
Решения Windows Phone
Существует много видов решений для Windows Phone, которые можно создать в Visual Studio: приложение Silverlight, приложение XNA и приложение, использующее совместно Silverlight и XNA. Также есть проекты для создания дополнительных элементов решений Windows Phone, например, фоновые задачи.
Решение Silverlight для Windows Phone. Решение для Windows Phone, содержащее проект приложения на Silverlight, может иметь структуру, представленную на рис. 5.8.
(рис 5.8) Структура проекта приложения Silverlight для Windows Phone
Решение Silverlight для Windows Phone содержит файл MainPage.xaml, который описывает внешний вид главного экрана. Также оно содержит изображения, которые используются для вывода на экран значка приложения и заставки, которыми будет управлять программа. Если добавить новые страницы к приложению Silverlight, то они будут добавлены к проекту в виде XAML-файлов и файлов отделенного кода. Проект также содержит ссылки на все системные библиотеки, которые использует телефон.
Решение XNA для Windows Phone. Технология XNA Framework создана для того, чтобы создавать игры. Она предоставляет целый игровой движок, в который можно поместить свою игру и добавить внешний вид. Она позволяет управлять ресурсами и легко добавлять в игру изображения, текстуры и звуки.
При создании решения XNA, используя шаблон Visual Studio, фактически создается сразу два проекта (рис. 5.9). Один из них содержит исполняемый код, а другой содержит все используемые игрой ресурсы. Идея состоит в том что, если игра должна работать на нескольких платформах, достаточно просто добавить к решению новые проекты. Они могут совместно использовать один проект ресурсов.
(рис 5.9) Решение игры XNA для Windows Phone
На рисунке представлено решение новой игры XNA. Если добавить в проект ресурсы, например, изображения, то они будут сохранены в проекте ресурсов WindowsPhoneGameContent, который может использовать любой проект игры в этом решении.
Совместное использование Silverlight и XNA. Решение, совместно использующее XNA и Silverlight, содержит три проекта (рис. 5.10). Проект Silverlight фактически содержит приложение игры XNA, работающей на одной из страниц приложения Silverlight. Однако, решению нужна библиотека компонентов XNA, а также проект ресурсов XNA. Visual Studio автоматически создает все необходимые проекты, их нужно просто заполнить кодом.
(рис 5.10) Решение игры XNA для Windows Phone
Создание решения Windows Phone
Процесс создания приложений для Windows Phone такой же, как и создание консольных приложений. При выборе шаблона Visual Studio создает проекты и исходные файлы, соответствующие этому шаблону.
Для создания нового проекта в меню Visual Studio нужно выбрать Файл -> Создать проект…. Откроется диалоговое окно Создать проект (рис. 5.11).
(рис 5.11) Список шаблонов проектов приложений Silverlight для Windows Phone
В левой части диалогового окна отображается список всех доступных проектов. Если в системе установлен Windows Phone SDK, в этом списке будут пункты Silverlight for Windows Phone и XNA Game Studio 4.0. В центральной части окна отображается список доступных проектов для выбранной группы.
Также можно использовать шаблон для создания проекта, который нужно добавить к существующему приложению Windows Phone. Например, можно добавить Агент запланированных заданий Windows Phone. Этот проект позволяет добавить запланированную задачу к приложению, чтобы она могла выполнять работу с некоторым интервалом времени, когда пользователь не использует приложение.
Для начала попробуем создать простое приложение на основе шаблона Приложение Windows Phone. Можно создать такое же приложение и без использования шаблона — просто создав проекты и исходные файлы и корректируя их настройки — но шаблоны упрощают этот процесс.
В нижней части окна нужно ввести имя приложения. Рекомендуется оставить установленным флажок Создать каталог для решения — в этом случае Visual Studio создаст папку с именем приложением и поместит в нее все файлы решения и папки проекта.
При нажатии на кнопку OK Visual Studio спросит, для какой версии платформы нужно создать приложение (рис. 5.12).
(рис 5.12) Список доступных версий операционной системы Windows Phone
Первая версия Windows Phone называлась Windows Phone 7. Последняя на текущий момент версия Windows Phone имеет номер 7.5, но в инструментальных средствах и в операционной системе эта версия имеет номер 7.1. Это может вызвать некоторую путаницу, однако можно привести следующее объяснение:
ОС Windows Phone 7.0 — оригинальная версия телефона с ограниченным набором функций. Однако этот набор функций доступен во всех телефонах;
ОС Windows Phone 7.1 — обновленная версия, которая включает новые функции, доступные только в телефонах последней версии Windows Phone.
Многие из разделов этого курса используют новые возможности Windows Phone 7.5 (работающий под управлением операционной системы Windows Phone 7.1), поэтому необходимо выбрать пункт ОС Windows Phone 7.1.
Visual Studio создаст пустое рабочее приложение Windows Phone Silverlight. В него можно добавить визуальные элементы и поведение. В пустом рабочем приложении Silverlight среди прочих содержатся четыре файла: App.xaml и App.xaml.cs, MainPage.xaml и MainPage.xaml.cs. Файлы App.xaml и MainPage.xaml — это файлы XAML, тогда как App.xaml.cs и MainPage.xaml.cs — это файлы C#. Такой принцип именования файлов подразумевает, что два файла C#-кода являются файлами отделенного кода, связанными с двумя XAML-файлами. Они содержат код для поддержки разметки. Это основная концепция Silverlight.
Запуск приложений Windows Phone
Для того чтобы начать процесс компиляции приложения в Visual Studio нужно просто нажать клавишу F5 на клавиатуре или выбрать в главном меню пункт Отладка -> Начать отладку. Visual Studio создаст сборку, добавит в нее все необходимые для работы программы ресурсы и запустит программу.
В отличие от компиляции и построения приложения для Windows тот же процесс для приложений для Windows Phone является более сложным. Программа не запустится на компьютере — вместо этого ее нужно передать в устройство Windows Phone или эмулятор. Кроме того, любые ресурсы, необходимые для работы программы (например, ресурсы, которые не встроены в сборку), должны быть доступны программе в целевом устройстве. Эта проблема решается путем использования контейнерного файла, в который размещается само приложение и все необходимые ресурсы.
На рис. 5.13 представлен выходной каталог для программы Сумматор. В нем содержатся все ресурсы и файл AddingMachine.dll с кодом программы. Среди прочих файлов присутствует файл с расширением XAP — этот файл является контейнером, который содержит все приложение.
(рис 5.13) Список файлов программы, созданных в результате компиляции проекта
XAP-файл. Файл XAP является архивным файлом (его формат такой же, как и у ZIP-файлов), который содержит все файлы приложения.
На рис. 5.14 представлено содержимое XAP-файла для приложения Сумматор. Этот файл нужно передать в устройство Windows Phone, где он должен работать. При запуске приложения на выполнение в Visual Studio этот файл создается и передается в устройство или эмулятор. Целевое устройство распаковывает этот файл и запускает приложение. Если программа состоит из нескольких библиотек и содержит изображения и звуковые файлы, все они будут помещены в XAP-файл.
(рис 5.14) Список файлов программы, которые размещаются в XAP-файле
Таким образом, вся программа для Windows Phone представляется в виде XAP-файла, который должен быть загружен в телефон.
5.2. Отладка программ
Отладка является важным этапом создания приложений. Среда проектирования приложений для Windows Phone позволяет легко отлаживать программы. При отладке можно просмотреть значения переменных на любом шаге и получить представление о том, насколько правильно работает программа. Программы можно отлаживать на физическом устройстве или в эмуляторе.
Использование эмулятора Windows Phone
Эмулятор Windows Phone дает возможность проверить правильность работы программ. Эмулятор работает так же, как и физическое устройство.
Можно развернуть программу в эмуляторе или в физическом устройстве. Выбрать физическое устройство или эмулятор для выполнения программы можно с помощью раскрывающегося списка справа от кнопки запуска программы (рис. 5.15).
(рис 5.15) Список целевых устройств, которые можно использовать для запуска программы
Если выбрать пункт Windows Phone Device, и при этом физическое устройство не будет подключено, при попытке выполнения программы Visual Studio выдаст ошибку.
В эмуляторе Windows Phone можно использовать мышь для щелчка по элементам. Если в компьютере есть мультисенсорный монитор и операционная система Windows 7, можно использовать мультисенсорные функции пользовательского интерфейса.
Чтобы остановить выполнение программы, нужно нажать на кнопку эмулятора Назад (кнопка со стрелкой влево) или закрыть окно эмулятора.
В состав эмулятора входят не все встроенные программы, которые есть в физическом устройстве. Среди встроенных функций присутствуют только программа Internet Explorer, возможность изменения некоторых настроек системы, включая доступные языки клавиатуры телефона, и эмуляция некоторых функций устройства, а такие программы как Калькулятор, Календарь и интерфейс Zune отсутствуют.
Эмулятор не может работать с такой же скоростью как аппаратные средства Windows Phone. Фактическая скорость приложения ограничена в эмуляторе так, чтобы эмулятор в некоторой степени соответствовал физическому устройству. Однако, имеет смысл предварительно запустить разрабатываемое приложение в физическом устройстве, чтобы определить, как оно будет работать на самом деле.
Когда Visual Studio развертывает приложение в эмуляторе Windows Phone, оно остается там, пока эмулятор не будет перезагружен. Приложение можно запустить повторно, щелкнув по его значку.
Отладчик Visual Studio
Функции отладчика интегрированы в среду Visual Studio. Можно запускать программы прямо в Visual Studio. Можно добавить в программу точки останова. Когда программа дойдет до точки останова, Visual Studio приостановит отладку программы и позволит просмотреть значения переменных в коде программы. Можно добавлять точки останова и при отладке программ, работающих на физическом устройстве. Можно даже устанавливать и удалять контрольные точки, во время работы программы.
Добавление точки останова. Точки останова добавляются одинаково при создании любой программы в Visual Studio: нужно щелкнуть мышью в левом поле напротив строки, в которой нужно установить точку останова. При этом, строка будет выделена цветом. Повторное нажатие в поле уберет точку останова. Когда программа дойдет до этой строки, ее работа приостановится, и можно будет просмотреть значения переменных перед выполнением команды в выделенной строке. Для этого можно навести указатель мыши на нужную переменную в коде программы.
Пошаговое выполнение программы. Можно выполнить одну строку программы, нажав клавишу F11 или аналогичную кнопку на панели инструментов. Каждый раз при нажатии на эту кнопку программа выполнит одну строку кода программы и перейдет к следующей.
Пошаговое выполнение программы осуществляют три клавиши клавиатуры (или аналогичные кнопки на панели инструментов):
F11 — выполнение одной строки программы. Если эта строка будет методом, отладчик выполнит одну строку этого метода. Это действие называется "шаг с заходом";
F10 — выполнение одной строки программы. Если эта строка будет методом, отладчик выполнит метод целиком. Это действие называется "шаг с обходом". Эта возможность позволяет не выполнять пошаговую отладку метода;
Shift + F11 — выполнение всех действий программы до конца текущего метода и выход из него. Это действие называется "шаг с выходом".
Управление выполнением программы
Visual Studio поддерживает связь с работающей в устройстве программой. Отладчик позволяет управлять выполнением программы.
Запуск или возобновление выполнения программы. Для того чтобы запустить программу или продолжить ее выполнение после остановки нужно нажать клавишу F5.
Приостановка выполнения программы. Приостановить выполнение программы полезно, если программа выполняется дольше, чем ожидается, и есть подозрение, что программа "зависла". Чтобы приостановить выполнение программы, нужно нажать клавиши Ctrl + Alt + Break. Также для приостановки выполнения программы можно установить точки останова.
Остановка программы. Клавиши Shift + F5 можно использовать для прекращения работы программы после выполнения текущей операции. Остановку программы нужно использовать с осторожностью, поскольку существует опасность потери или повреждения данных, с которыми работает программа.
Управление точками останова. В Visual Studio есть окно со списком точек останова в программе. Его можно вызвать, выбрав в главном меню пункт Отладка -> Окна -> Точки останова. В этом окне можно установить свойства точки остановки. Можно указать, чтобы точка останова срабатывала после определенного количества заходов, или при выполнении определенного условия. Это полезно в случае, например, если программа завершается неудачей после пятидесятой итерации цикла.
Окно интерпретации. Окно интерпретации можно вызвать, выбрав в главном меню пункт Отладка -> Окна -> Интерпретация. В этом окне можно просмотреть и изменить значения переменных, а также получить значение произвольного выражения.
Краткие итоги
Среда проектирования Visual Studio используется для создания приложений для Windows Phone. Существует бесплатная версия этого инструмента.
Приложения Microsoft .NET состоят из сборок. Сборка может быть исполняемой программой (.exe) или библиотекой (.dll).
Visual Studio объединяет необходимые для создания сборки элементы в проект. В проект включаются исходные файлы и другие ресурсы программы, такие как изображения и звуки.
Решение Visual Studio объединяет несколько проектов. Проекты могут представлять отдельные компоненты большой системы, например серверная и клиентская части приложения.
Приложения Windows Phone могут содержать несколько сборок, включая ресурсы библиотек. Сборка будет содержать ссылки на все используемые ресурсы с указанием их версий.
Приложение Windows Phone перед развертыванием на целевое устройство упаковываются в файл XAP, который содержит сборки программы и все используемые программой ресурсы.
Эмулятор Windows Phone работает на компьютере под управлением Windows и предоставляет эмуляцию функциональности устройства.
Visual Studio предоставляет возможность добавления в программу точек останова, в которых выполнение программы приостанавливается, и программист может просмотреть значения переменных в программе. Точки останова и пошаговое выполнение программы могут использоваться при выполнении программ в физическом устройстве или эмуляторе Windows Phone.
Вопросы
Как можно создать на основе файлов исходного кода программы исполняемый файл?
Как в Visual Studio создать новую программу?
Что такое "пространство имен"?
Как совместно использовать несколько проектов?
Каким образом можно добавить в проект ресурсы?
Что такое "динамическая библиотека"?
Что такое "построение программы"?
Чем отличается термин "решение" от термина "проект"?
Какие типы решений и проектов приложений для Windows Phone поставляются с Windows Phone SDK?
Что представляют собой файлы с расширением .xap?
Как в Visual Studio запустить отладку приложения в эмуляторе Windows Phone?
Какие средства Visual Studio позволяют осуществлять отладку приложений?
Упражнения
Упражнение 1. Создание приложения Калькулятор времени
В этом упражнении вы создадите приложение Калькулятор времени, описанное в упражнении к предыдущей лекции.
Создание пустого приложения Silverlight
Запустите Visual Studio с установленным Windows Phone SDK.
В главном меню выберите пункт Файл -> Создать проект…. Откроется диалоговое окно Создать проект.
В списке установленных шаблонов выберите Silverlight for Windows Phone.
В центральной части окна выберите Приложение Windows Phone.
В нижней части окна в поле Имя введите TimeCalculator.
Выберите подходящий каталог для проекта. По умолчанию Visual Studio поместит проект в папку Visual Studio 2010 \ Projects в папке Документы.
Убедитесь, что флажок Создать каталог для решения установлен, и нажмите OK, чтобы создать новое приложение.
Visual Studio попросит выбрать целевую платформу для нового приложения. Выберите ОС Windows Phone 7.1 и нажмите OK. Visual Studio создаст новое приложение в указанном местоположении.
Нажмите клавишу F5, чтобы запустить пустую программу. Запустится эмулятор Windows Phone (если он еще не был запущен), и приложение будет выполняться в эмуляторе.
Щелкните по окну Visual Studio, чтобы его выбрать. Нажмите клавиши Shift + F5, чтобы остановить выполнение программы. Также можно остановить программу, нажав кнопку Назад в эмуляторе Windows Phone.
Добавление элементов Silverlight
Убедитесь, что в Visual Studio открыто окно MainPage.xaml. Слева находится окно дизайнера (оно похоже на Windows Phone), в центре — код XAML, справа — обозреватель решений. (Указанные области могут располагаться в окне Visual Studio по-другому.)
Измените текст имя страницы в элементе PageTitle на TimeCalculator.
Измените текст МОЕ ПРИЛОЖЕНИЕ в элементе ApplicationTitle на ваше имя.
В главном меню выберите пункт Вид -> Панель элементов, чтобы отобразить на экране панель инструментов с доступными элементами. Элементы можно перетаскивать с панели инструментов в окно дизайнера.
Добавьте следующие элементы пользовательского интерфейса в окно дизайнера приложения и задайте их имена, как указано в таблице:
| Назначение элемента | Тип элемента | Имя элемента |
| Часы времени начала | TextBox | startHourTextBox |
| Минуты времени начала | TextBox | startMinTextBox |
| Часы времени окончания | TextBox | endHourTextBox |
| Минуты времени окончания | TextBox | endMinTextBox |
| Кнопка для вычисления | Кнопка | calcButton |
| Результат | TextBlock | resultTextBlock |
Можно также добавить дополнительные элементы TextBlock, чтобы разместить в окне приложения пояснительный текст.
Настройте свойства добавленных элементов, чтобы приложение выглядело приблизительно таким образом (рекомендуется установить размер текста элементов TextBlock равным 25):
Запустите программу. Обратите внимание, что можно вводить текст в текстовые поля и нажимать на кнопку.
Добавление поведения в приложение
В обозревателе решений откройте файл MainPage.xaml.cs.
Добавьте после конструктора MainPage следующее описание метода calculateMinutes:
private void calculateMinutes()
{
// здесь нужно будет добавить проверку данных и обработку исключений
int startMin = int.Parse(startMinTextBox.Text);
int startHour = int.Parse(startHourTextBox.Text);
int endMin = int.Parse(endMinTextBox.Text);
int endHour = int.Parse(endHourTextBox.Text);
// здесь нужно будет добавить код для вычисления времени
int result = 99;
resultTextBlock.Text = "Результат: " + result.ToString();
}
Вернитесь в окно редактора файла MainPage.xaml.
Дважды щелкните мышью по кнопке вычислить. Visual Studio создаст обработчик нажатия на кнопку и откроет код обработчика, созданный в файле MainPage.xaml.cs.
private void calcButton_Click(object sender, RoutedEventArgs e)
{
}
Добавьте вызов метода calculateMinutes в этот метод-обработчик.
Запустите программу. Обратите внимание, что при нажатии на кнопку значение результата изменяется на 99.
Завершение создания приложения
В редакторе кода XAML добавьте во все текстовые поля следующий атрибут:
InputScope="Number"
Это укажет Windows Phone, что в текстовые поля будут вводиться числа.
Добавьте в метод calculateMinutes код для вычисления разности времени между введенными моментами времени (создайте код самостоятельно).
Запустите программу и проверьте правильность ее работы.
Упражнение 2. Отладка приложения
В этом упражнении вы выполните отладку приложения Калькулятор времени, которое создал другой программист. Программа иногда выдает неправильные результаты. Необходимо выполнить отладку программы, чтобы обнаружить проблему.
Откройте проект TimeCalculator, который находится в папке Lab3 TimeCalculator.
Выполните программу. Введите значения Начало: 00:00 и Окончание: 01:00.
Нажмите кнопку вычислить. Обратите внимание, что программа выводит на экран 60 минут, что является правильным результатом.
Введите значения Начало: 00:00 и Окончание: 01:30.
Нажмите кнопку вычислить. Обратите внимание, что программа выводит на экран 60 минут, что является неверным результатом.
Во время работы программы откройте исходный файл MainPage.xaml.cs в обозревателе решений.
Установите точку останова в следующей строке, щелкнув в поле слева от этой строки:
resultTextBlock.Text = "Результат: " + result.ToString();
Нажмите кнопку вычислить еще раз. Теперь программа должна приостановить работу в этой строке.
Просмотрите значения переменных. Попробуйте установить причину возникающей проблемы. Если вы не можете обнаружить ошибку, выполните следующий шаг.
Нажмите клавишу F5 для возобновления программы. Введите значения Начало: 01:02 и Окончание: 03:04. Теперь используйте отладчик, чтобы просмотреть значения переменных startHour, startMin, endHour и endMin.
Определите и исправьте причину ошибок.
Удалите контрольную точку, щелкнув мышью в левом поле еще раз, и проверьте правильность работы программы на тестовых данных.