2009-11-05 4 views
0

У меня есть настраиваемый тип проекта на основе типа проекта библиотеки классов C# в пакете VSX (2008+). Для этого типа проекта, хотя выход является библиотекой классов, я хочу иметь возможность отлаживать это приложение, просто нажав F5 (и т. Д.). У меня есть готовый исполняемый файл, который принимает путь сборки как аргумент командной строки и загружает его для тестирования рабочей среды.VSX: Тип проекта пользовательского пакета для mimik «Отладка >> Начало действия >> Запуск внешней программы»

Я могу моделировать это поведение вручную, используя Project's «Debug >> Start Action >> Start External Program» на страницах свойств, предоставив путь к исполняемому файлу и предоставив относительный путь к выходной DLL как командную строку аргумент. Но это слишком много настроек. Я бы хотел, чтобы код пакета проекта имел возможность автоматически захватить сборку активной конфигурации и установленное местоположение исполняемого файла workbench.

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

Лучшее решение, которое я могу себе представить, связано с перехватом события «Начать отладчик» (только для этого типа проекта), прежде чем он удалит «Проект с типом выходного типа библиотеки классов не может быть запущен напрямую» и вместо этого выполняет рабочую среду (отладчик прилагается, конечно). Я не знаю, предоставляет ли VSX необходимые части.

Я бы заплатил за этот простой (?) Пакет (наряду с несколькими другими требованиями, в основном на уровне проекта, который уже частично реализован), написанный кем-то с опытом, но я не нашел консультантов, которые специализируются на пакетах VSX. Рекомендации приветствуются.

Я принимаю неправильный подход? Я предполагаю, что мне нужен пакет, а не надстройка.

+0

Вы придумали хорошее решение для этого? – Mario

+0

Привет, Марио, да, он требовал создать собственный пакет и связь с этим пакетом из отлаженного процесса. –

ответ

2

Основываясь на вашем описании, это звучит так, будто у вас нет пользовательского типа проекта, а скорее таможня project template. (Обычно у вас будет только собственный тип проекта, если у вас есть собственный язык программирования).

Предполагая, что это так, я думаю, вы должны быть в состоянии create your own IWizard implementation, который установил бы проект для запуска исполняемого файла вашего хоста и т. Д. ... во время создания проекта (то есть после того, как пользователь перейдет через диалог «Новый проект») ,

Например, вы могли бы сделать что-то вроде следующего в ProjectFinishedGenerating реализации IWizard в:

public void ProjectFinishedGenerating(Project project) 
{ 
    foreach (Configuration config in project.ConfigurationManager) 
    { 
    config.Properties.Item("StartAction").Value = 1; //Launch external program 
    config.Properties.Item("StartProgram").Value = <pathToYourEXE>; 
    config.Properties.Item("StartArguments").Value = <argumentsToYourExe>; 
    } 
} 
+0

Вы правы, у меня нет собственного языка - он основан только на библиотеке классов C#. Все, что я хочу сделать (до сих пор), это добавить элемент контекстного меню на уровне проекта и эту возможность запускать внешнюю программу. Все это соответствует шаблону проекта? У меня создалось впечатление, что для получения проектных контекстных пунктов меню потребуется отдельный указатель для типа проекта. –

+0

Но даже если бы я использовал этот подход IWizard, есть ли подходящий крючок, чтобы убедиться, что значения правильно обновлены после создания проекта? Возможно, имя сборки было изменено или, возможно, расположение предоставленного exe отличается от новой машины, на которую был скопирован проект. Я бы не захотел оставить эту работу разработчику. –

+0

Привет, Аарон, какие-нибудь мысли по этому поводу? –