Статьи

Пакет DynamicLocalhost NuGet для Windows Phone

Зачем?

Потому что я должен быть в состоянии получить последние и F5!

Я думаю, что простота является решающей мерой успеха во всех программах Я думаю, что возможность загружать исходный код на любую машину разработчика и F5 является важной целью, к которой нужно стремиться. Удаление ручных процессов и рационализация рабочего процесса разработки может привести к значительному повышению производительности, особенно при подключении новых разработчиков. Я считаю, что базы данных должны быть подготовлены и заполнены автоматически, все сторонние библиотеки должны быть легко доступны в репозитории, и следует избегать любых шагов, которые необходимо запомнить или задокументировать, любой ценой.

Но это не было легко на устройстве Windows Phone

Вышеупомянутые цели были легко достижимы во всех моих проектах, кроме приложений для Windows Phone. Ключевым компонентом этого рабочего процесса является магическая переменная, известная как localhost .

Когда я выполняю F5 в одном из моих приложений MVC, проект запускает браузер по адресу http: // localhost / MyProject .

Когда я эмулирую одно из моих приложений Windows Phone в F5, он подключается к моему локальному серверу IIS по адресу http: // localhost / MyProject .

Когда я использую одно из моих приложений Winodws Phone на реальном устройстве, все идет наперекосяк. Локальный хост на телефоне не указывает на мою коробку разработки, естественно, он указывает на себя. Таким образом, затруднительное положение.

Давайте выдвинем теорию

Прошлой ночью у меня была идея, и я решил ее реализовать. Что если бы я мог сохранить URL-адрес своих локальных веб-служб IIS в простом текстовом файле в пакете XAP? Тогда я мог прочитать этот файл во время AppLaunch и сохранить его на потом. Эта часть была легкой, теперь для магии. Что если бы я мог придумать шаг PreBuild в Visual Studio, который мог бы изменить указанный файл .txt во время компиляции и заменить его содержимое на Environment.MachineName? После небольшого возни с новым консольным проектом у меня все заработало.

NuGet, PowerShell, встречайте DynamicLocalhost

Я давний поклонник NuGet. Я видел некоторые поразительно творческие вещи, сделанные с ним, кроме простых дампов библиотек. Люди, намного умнее меня , используют PowerShell для создания впечатляющих каркасных структур. Вдохновленный, я открыл свои книги по Windows PowerShell и MSBuild и приступил к работе.

Я закончил строить следующее:

  1. Никаких сборочных зависимостей, только один исходный файл и один файл .txt добавляются в ваш проект
  2. Создана задача MSBuild, которая обработает файл LocalHostname.txt и заполнит его Environment.MachineName
  3. Измените файл .csproj, добавив мою пользовательскую цель BeforeBuild, которая выполняет вышеуказанную задачу при каждой компиляции, таким образом гарантируя, что текстовый файл всегда имеет правильное имя компьютера

Хорошо, это здорово, но как мне это использовать?

Сначала вы должны установить пакет. Убедитесь, что NuGet установлен.

образ

Остальное зависит от вас, использовать класс DynamicLocalhost, как вы считаете нужным.

Для меня в моих проектах WP7 я создаю статический класс ApplicationSettings для использования во всем приложении. Комментарии ниже, надеюсь, объяснят, как это работает. Единственный исходный код, который вы когда-либо регистрировали, говорит «localhost» — и будет динамически заменен во время компиляции на фактическое имя компьютера разработчика. Это означает, что вы можете проверять все, получать последние обновления в любое время, когда вам захочется, и вам никогда не придется беспокоиться о том, что кто-то случайно проверит URL своего реального компьютера, что затруднит ваш рабочий процесс.

public static class ApplicationSettings
{
    public static string WebServiceBaseUrl { get; private set; }
 
    static ApplicationSettings()
    {
#if DEBUG
        // Compiling this app on MY machine, WebServiceBaseUrl will become: http://MATT-PC/RealWorldWP7.Web/
        // The returned URL will be automatically determined on each compile
        // Therefore no issues checking it in and getting latest on any developer machine
        WebServiceBaseUrl = DynamicLocalhost.ReplaceLocalhost("http://localhost/RealWorldWP7.Web/");
#else
        WebServiceBaseUrl = "http://services.mydomain.com/v1/";
#endif
    }
}

Исходный код, Обратная связь, Форкинг!

Я бы очень, очень хотел услышать отзывы об этом. Я искал в интернете, пытаясь увидеть, существует ли что-то подобное, и обнаружил, что ничего не произошло. Если вы считаете это полезным или у вас есть предложения, пожалуйста, дайте мне знать!

Я также очень новичок в PowerShell и не удивлюсь, если напишу несколько худших сценариев .ps1. Любой вклад гуру PowerShell будет приветствоваться.

Получить источник!

Он использует Mercurial, так что разветвите его и обязательно отправьте мне запросы на извлечение, если вы напишете что-нибудь классное!

Источник:
http://www.matthidinger.com/archive/2011/10/10/DynamicLocalhost-NuGet-Package-for-Windows-Phone.aspx