Visual Studio 2010 Автоматическое присоединение к процессу - PullRequest
16 голосов
/ 27 января 2012

Я использую Visual Studio 2010, мое приложение имеет многослойный архитектор,

MainUI, WCFService, BLL и DAL

Мой MainUI взаимодействовал с WCF, а WCF далее связывался с BLL и DAL, всякий раз, когда мне нужно отладить BLL и DAL, мне сначала нужно подключить WCF как процесс в Visual Studio (каждый раз). Как я могу спасти себя от этой проблемы.

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

Спасибо

Ответы [ 10 ]

16 голосов
/ 31 января 2012

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

Порядок запуска - это порядок, в котором вы выбираете проекты.

Щелкните правой кнопкой мыши свое решение ивыберите «выбрать проекты запуска».Затем выберите несколько проектов запуска и выберите проекты.

4 голосов
/ 07 февраля 2012

Пример того, как запустить процесс и присоединить его к Visual Studio 2010 с EnvDTE (версия актуальна).

//c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\EnvDTE.dll
using Process = EnvDTE.Process;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = System.AppDomain.CurrentDomain.BaseDirectory + @"\YourProcess.exe";
//Start the process
p.Start();
//Wait for process init
System.Threading.Thread.Sleep(1000);

bool attached = false;
//did not find a better solution for this(since it's not super reliable)
for (int i = 0; i < 5; i++)
{
    if (attached)
    {
        break;
    }
    try
    {
        EnvDTE.DTE dte2 = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
        EnvDTE.Debugger debugger = dte2.Debugger;
        foreach (Process program in debugger.LocalProcesses)
        {
            if (program.Name.Contains("YouProcess.exe"))
            {
                program.Attach();
                attached = true;
            }
        }
    }
    catch (Exception ex)
    {
        //handle execption...
    }
}
1 голос
/ 31 января 2012

Вы пробовали System.Diagnostics.Debugger.Launch() в своем сервисе, к которому вы хотите подключить отладчик?
http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx

1 голос
/ 27 января 2012

Попробуйте использовать System.Diagnostics.Debugger.Break () в коде. Если отладчик не подключен, то при запуске этого кода появится запрос на присоединение отладчика, и вы можете выбрать существующий экземпляр.

0 голосов
/ 02 июля 2013

Лично я предпочитаю использовать Debugger.Launch () , как предлагается здесь в этой теме , поскольку он не нуждается в ссылках на DTE (это специфично для IDE и должно быть явно указано в используемом проекте)

0 голосов
/ 23 апреля 2013

Вот задержанная статья, которая объясняет, как это сделать ... Вы можете настроить этот макрос.

http://sivablogz.wordpress.com/2013/04/08/running-an-application-and-attaching-to-the-process-with-a-macro-in-visual-studio/

0 голосов
/ 07 февраля 2012

Если это для самостоятельной службы Windows WCF, необходимо настроить хост службы WCF для работы в консоли или в качестве службы Windows.После запуска в консоли вы можете начать отладку из Visual Studio.

Создайте настройку приложения под названием «RunInConsole».В методе запуска узла службы используйте следующий код:

public class MyWindowsService : ServiceBase
{
    public static void Main(string[] args)
    {
        // if configuration says to run in the console, run the service in a console app. otherwise, use windows
        // service to host application
        if (ConfigurationManager.AppSettings["RunInConsole"] == "true")
        {
            using (ServiceHost host = new ServiceHost(typeof(MyService)))
            {
                host.Open();
                Console.WriteLine("Press <Enter> to terminate the Host application.");
                Console.ReadLine();
            }
        }
        else
            ServiceBase.Run(new MyWindowsService ());
    }

}

Во всех средах, в которых вы развертываете, этот параметр конфигурации всегда будет иметь значение false, иначе служба не запустится, но когдалокально отлаживая, вы установили бы его в true.

0 голосов
/ 02 февраля 2012

Вы пытались использовать WCFSvcHost.EXE, поставляемый с Visual Studio, для запуска службы BLL и DAL? Есть файл справки с ним. Файл справки лучше всего гласит: «Узел службы Windows Communication Foundation (WCF) (wcfSvcHost.exe) позволяет запускать отладчик Visual Studio (F5) для автоматического размещения и тестирования внедренной службы. Затем можно протестировать службу с помощью Тестовый клиент WCF (wcfTestClient.exe) или ваш собственный клиент для поиска и исправления возможных ошибок ». Установкой по умолчанию является C: \ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE. Вы можете настроить его для использования вашего приложения MainUI в качестве клиента. В файле справки WcfSvcHost.chm в том же каталоге есть раздел для использования настраиваемого клиента в Сценариях для использования ECF Service Host. Если вы предпочитаете, вот ссылка на справку на веб-сайте MS: Использование WCF Service Host (wcfSvcHost.exe) .

0 голосов
/ 31 января 2012

Если я правильно понимаю, макрос может быть ответом:

в Vs:

  1. Инструменты-> Макросы-> Запись TemporaryMacro (Ctrl + shift + r)
  2. Присоединить VS к процессу как обычно (ctrl + alt + p)
  3. Остановить запись макроса (ctrl + shift + r)
  4. Перейдите в «Просмотр» -> «Другие окна» -> «Macro Explorer» (CTRL + F8)
  5. найдите ваш временно макрос (где-то в MyMacros-> RecordingModule) и переименуйте его
  6. Теперь перейдите в Инструменты-> Параметры-> Клавиатура и найдите ваш макрос (в «Показать команду, содержащую имя вашего макроса»)
  7. в «Нажать сочетания клавиш» привязать его к некоторому сочетанию клавиш (у меня есть макрос в CTRL + SHIFT + K;))
  8. Нажмите ОК
  9. Будь счастлив
0 голосов
/ 31 января 2012
  1. На странице свойств для проекта службы wcf выберите вкладку Web.
  2. Выберите «Запустить внешнюю программу» для запуска и выберите MainUI.exe.
  3. Установите рабочий каталог в качестве папки, в которой находится MainUI.exe (возможно, в папке bin).
  4. Установите точку останова и нажмите клавишу f5, чтобы начать отладку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...