Увеличение версии для проектов Windows Phone в настоящее время должно выполняться вручную, поскольку разработчики обновляют атрибут версии в файле WMAppManifest.xml . Всякий раз, когда я устанавливаю приложение, над которым я сейчас работаю, мне всегда интересно, есть ли на устройстве Windows Phone самая последняя доступная сборка. В статической версии это становится проблемой, потому что часто изменения не визуальные, а выполняются в фоновом режиме
Поскольку нет встроенных возможностей приращения версии, я разработал очень простое консольное приложение, которое запускается перед процессом сборки, изменяя текущее значение в файле WMAppManifest.xml . Вот источник — он настолько прост, насколько он может получить:
using System;
using System.Linq;
using System.Xml;
namespace WPVersionIncrementer
{
class Program
{
static void Main(string[] args)
{
if (args.Count() == 5)
{
// Separate all parameters. If there aren't five of them, ignore execution.
string path = args[0];
string incrementMajor = args[1];
string incrementMiddle = args[2];
string incrementMinor = args[3];
string incrementBuild = args[4];
XmlDocument document = new XmlDocument();
document.Load(path);
XmlNode node = document.DocumentElement;
XmlNode appNode = node["App"];
string rawVersion = appNode.Attributes["Version"].Value.ToString();
string[] components = rawVersion.Split(new char[] { '.' });
// Get integer values for all four version components for easy manipulation
// read: increment
int major,middle,minor,build;
int.TryParse(components[0], out major);
int.TryParse(components[1], out middle);
int.TryParse(components[2], out minor);
int.TryParse(components[3], out build);
if (incrementMajor.ToLower() == "-i")
{
major++;
}
if (incrementMiddle.ToLower() == "-i")
{
middle++;
}
if (incrementMinor.ToLower() == "-i")
{
minor++;
}
if (incrementBuild.ToLower() == "-i")
{
build++;
}
// Compose the new version in a unified string and save it. The order of all components
// is preserved.
string compositeNewVersion = string.Format("{0}.{1}.{2}.{3}", major, middle, minor, build);
appNode.Attributes["Version"].Value = compositeNewVersion;
document.Save(path);
Console.ReadLine();
}
}
}
}
Чтобы фактически выполнить приращение, щелкните правой кнопкой мыши проект Windows Phone в обозревателе решений и выберите « Свойства» . Выберите Build Events и используйте это для командной строки события Post-build :
"C:\Users\Dennis\Documents\Visual Studio 2010\Projects\WPVersionIncrementer\WPVersionIncrementer\bin\Release\WPVersionIncrementer.exe" "$(ProjectDir)Properties\WMAppManifest.xml" -n -n -n -i
Здесь я должен упомянуть несколько вещей:
- Путь может отличаться — в зависимости от того, где находится WPVersionIncrementer, вы можете изменить расположение в приведенной выше команде.
- Используйте кавычки для пути — если вы знаете, что исполняемая папка содержит имена папок, состоящие из двух или более слов, разделенных пробелом, вам нужны кавычки для правильного распознавания пути.
- Используйте 5 параметров — даже если вам нужно только увеличить номер сборки, укажите, что вам не нужно увеличивать другие показатели. Например, вы можете использовать такую команду: WPVersionIncrementer PATH_TO_XML -n -n -i -i Только параметр -i распознается как флаг для увеличения значения. Параметры структурированы в порядке строки версии: Major, Middle, Minor, Build .
- Используйте папку « Свойства » для изменения файла WMAppManifest.xml и НЕ « Отладка или выпуск» , где он также найден, но фактически скопирован во время сборки из « Свойства» .
После выполнения команды и возврата в Visual Studio вы получите уведомление о том, что один файл в проекте был изменен и должен быть перезагружен:
Теперь, когда WMAppManifest имеет обновленную версию, вы всегда можете прочитать ее внутри и отобразить на экране «О программе» или в любом месте приложения.
Рекомендуемое чтение: чтение локального XML-файла в Windows Phone 7
Вы можете скачать экспериментальный исходный код здесь .