Увеличение версии для проектов 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
Вы можете скачать экспериментальный исходный код здесь .