Автоматически остановитесь/перезапустите Сервер разработки ASP.NET на Сборке

Для тех, кто ищет решение для очистки , попробуйте следующее.

Как уже упоминалось в комментариях к этого ответа, вы должны использовать этот метод рекурсивно.

В этом примере у вас есть настройка веб-сайта в ./, где находится ваша папка .git и файл .gitignore, и установка установки WordPress в ./wordpress. Чтобы правильно игнорировать все в каталоге ./wordpress , кроме самого каталога темы (wordpress/wp-content/themes/my-theme), вам придется рекурсивно игнорировать и разрешать каждый каталог вплоть до каталога, который вы хотите разрешить:

wordpress/*
wordpress/wp-content/*
wordpress/wp-content/themes/*
!wordpress/wp-content
!wordpress/wp-content/themes
!wordpress/wp-content/themes/my-theme

Причина игнорирования подстановочным знаком и разрешения (или игнорирования «отдельно от») самого каталога позволяет Git сначала заглянуть внутрь каталога, прежде чем игнорировать все внутри. Затем мы говорим Git игнорировать все, кроме указанного нами каталога. Вот тот же синтаксис, но в порядке того, как Git смотрит на него:

wordpress/*                            # Ignore everything inside here
!wordpress/wp-content                  # Apart from this directory

wordpress/wp-content/*                 # Ignore everything inside here
!wordpress/wp-content/themes           # Apart from this directory

wordpress/wp-content/themes/*          # Ignore everything inside here
!wordpress/wp-content/themes/my-theme  # Apart from this directory

Надеюсь, это поможет кому-то лучше понять необходимость рекурсивного метода.

32
задан Alconja 20 May 2009 в 07:58
поделиться

3 ответа

Итак, я нашел обходной путь, основанный на ответе Магнуса, но с использованием следующего относительно простого макроса (почему они заставляют вас использовать VB для макросов? Я чувствую себя грязным):

Imports System
Imports System.Diagnostics

Public Module KillCassini

    Sub RestartDebug()
        If (DTE.Debugger.DebuggedProcesses.Count > 0) Then
            DTE.Debugger.Stop(True)
        End If
        KillCassini()
        DTE.Debugger.Go(False)
    End Sub

    Sub KillCassini()
        Dim name As String = "WebDev.WebServer"
        Dim proc As Process
        For Each proc In Process.GetProcesses
            If (proc.ProcessName.StartsWith(name)) Then
                proc.Kill()
            End If
        Next
    End Sub

End Module

Обычно, если отладчик запущен в данный момент, он остановит его, а затем уничтожит все процессы с именем «WebDev.WebServer», которые должны быть всеми экземплярами Cassini, а затем снова запустит отладчик (который неявно запустит Cassini снова). Я использую proc.Kill () , потому что ни proc.CloseMainWindow () , ни proc.WaitForExit (1000) , похоже, не работают ...

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

9
ответ дан 27 November 2019 в 20:45
поделиться

Единственный известный мне способ - это выполнить собственный запуск Cassini для события post.build. Этот заказной процесс убивает все экземпляры Cassini и запускает новый. Чтобы заставить это работать, вам нужно будет создать небольшую пользовательскую утилиту командной строки. Я назвал это SpawnProcess здесь.

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Diagnostics;

namespace SpawnProc
{
  class Program
  {
    public static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        // Kill all current instances
        FileInfo fi = new FileInfo(args[0]);
        string name = Path.GetFileNameWithoutExtension(fi.FullName);
        foreach (Process proc in Process.GetProcessesByName(name))
        {
          proc.Kill();
        }

        ProcessStartInfo startInfo = new ProcessStartInfo(args[0]);
        if (args.Length > 1)
        {
          startInfo.Arguments += "/port:" + args[1];
        }

        if (args.Length > 2)
        {
          startInfo.Arguments += " /path:\"" + args[2].Trim(new char[]{'"'}) + "\"";
        }
        if (args.Length > 3)
        {
          startInfo.Arguments += " /vpath:\"" + args[3].Trim(new char[]{'"'}) + "\"";
        }

        try
        {
          Process.Start(startInfo);
        }
        catch (Exception ex)
        {
          Debug.WriteLine("Error: " + ex.Message);
          for (int i = 0; i < args.Length; i++)
          {
            Debug.WriteLine("args[" + i + "]: " + args[i].ToString());
          }
        }
      }
    }
  }
}

Затем вы должны указать Visual Studio не использовать Cassini. Перейдите в свойства вашего веб-приложения -> Интернет и выберите «Использовать настраиваемый веб-сервер», введите что-то вроде: http: // localhost: 1685 / (или любой другой номер порта, который вы хотите использовать). Затем введите эту команду в событии после сборки:

"$(ProjectDir)..\SpawnProc\bin\debug\SpawnProc" "C:\Program Files (x86)\Common Files\microsoft shared\DevServer\9.0\WebDev.WebServer.exe" 1685 "$(ProjectDir)" /

Убедитесь, что ваши пути верны, например, поскольку я использую 64-битную ОС, мой путь к программным файлам отличается от 32-битной ОС. Кроме того, мой SpawnProc.exe находится в подпроекте.

7
ответ дан 27 November 2019 в 20:45
поделиться

Обходной путь: отладки Global.aspx.cs application_start () с веб-сервером ASP.NET в Visual Studio

Включение «Редактирование и продолжение» на проекте веб-сервера работал для меня. Он не выключает кассини, когда вы прекратите отладовать, но он перезапускает кассини, когда вы начинаете отладить.

23
ответ дан 27 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: