Для тех, кто ищет решение для очистки , попробуйте следующее.
Как уже упоминалось в комментариях к этого ответа, вы должны использовать этот метод рекурсивно.
В этом примере у вас есть настройка веб-сайта в ./
, где находится ваша папка .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
Надеюсь, это поможет кому-то лучше понять необходимость рекурсивного метода.
Итак, я нашел обходной путь, основанный на ответе Магнуса, но с использованием следующего относительно простого макроса (почему они заставляют вас использовать 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)
, похоже, не работают ...
В любом случае, получив свой макрос, вы можете назначить его сочетаниям клавиш или создать собственные кнопки на панели инструментов для его запуска.
Единственный известный мне способ - это выполнить собственный запуск 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 находится в подпроекте.
Обходной путь: отладки Global.aspx.cs application_start () с веб-сервером ASP.NET в Visual Studio
Включение «Редактирование и продолжение» на проекте веб-сервера работал для меня. Он не выключает кассини, когда вы прекратите отладовать, но он перезапускает кассини, когда вы начинаете отладить.