Есть ли способ написать приложение, которое может подключаться к исполняемому экземпляру Visual Studio и выдавать ему команды? Например, можно ли написать WPF-приложение с кнопкой, которая при нажатии вызывает команду "Build.BuildSolution" для уже открытого экземпляра Visual Studio, заставляя его начать сборку?
Я уверен, что я мог бы использовать SendKeys для отправки Ctrl + Shift + B, но я хочу знать, есть ли способ написать фактический API для автоматизации Visual Studio и вызвать команды по имени.
Здесь программа С#, которая подключается к работающей Visual Studio и выдает команду сборки. Часть DTE.9
означает "Visual Studio 2008" - используйте DTE.8
для VS 2005 или DTE.10
для VS 2010.
using System;
using System.Runtime.InteropServices;
using EnvDTE80;
namespace SORemoteBuild
{
class Program
{
[STAThread]
static void Main(string[] args)
{
// Get an instance of the currently running Visual Studio IDE.
EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.9.0");
dte2.Solution.SolutionBuild.Build(true);
}
}
public class MessageFilter : IOleMessageFilter
{
// ... Continues at http://msdn.microsoft.com/en-us/library/ms228772.aspx
(Глупость с STAThread и MessageFilter "из-за проблем с конфликтами потоков между внешними многопоточными приложениями и Visual Studio", что бы это ни значило. Вставка кода из http://msdn.microsoft.com/en-us/library/ms228772.aspx заставляет работать.)
Если вы просто пытаетесь автоматизировать сборку/упаковку своих приложений, вы должны изучить MSBuild - это механизм сборки Microsoft, который позволяет вам script автоматизировать большинство функций Visual Studio.