Как вызвать Build / Rebuild / Clean в расширении VS - PullRequest
0 голосов
/ 27 сентября 2018

Я разрабатываю расширение VS, связанное со сборкой / перестройкой / очисткой проекта.Кто-нибудь знает, как запустить VSSDK действия по сборке / перестройке / очистке проекта?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Если вы не хотите использовать DTE, используйте IVsSolutionBuildManager.StartSimpleUpdateSolutionConfiguration .

Например, это перестроит решение

IVsSolutionBuildManager2 buildManager = ServiceProvider.GlobalProvider.GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager2;
if (ErrorHandler.Failed(buildManager.StartSimpleUpdateSolutionConfiguration((uint)(VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_FORCE_UPDATE | VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD),
    (uint)VSSOLNBUILDQUERYRESULTS.VSSBQR_OUTOFDATE_QUERY_YES,
    0/*false*/)))
{
    //handle the error
}
0 голосов
/ 29 сентября 2018

Необходимо использовать DTE Реализация:

Объект верхнего уровня в объектной модели автоматизации Visual Studio.Обратитесь к _DTE для этой функции.Не создавайте экземпляры из этого класса.


/// <summary>
/// Represents the field that
/// contain the AsyncPackage
/// instance.
/// </summary>
protected AsyncPackage AsyncPackage { get; set; }

/// <summary>
/// Represents the method that
/// retrieve the service with
/// the passed type.
/// </summary>
public async Task<T> GetServiceByTypeAsync<T>() where T : class
{
    return await AsyncPackage.GetServiceAsync(typeof(T)) as T;
}

Пример использования:

Env.DTE dte = await GetServiceByTypeAsync<EnvDTE.DTE>()

И тогда вы можете получить доступ к текущему решению и конфигурациям сборки:

dte.Solution.SolutionBuild.Build();
dte.Solution.SolutionBuild.Clean();

dte.Solution.SolutionBuild.BuildProject("Release", "UniqueName");

Чтобы найти определенный проект:

foreach (Project project in dte.Solution.Projects)
{
    dte.Solution.SolutionBuild.BuildProject("Release", project.UniqueName);
}

_DTE Interface | _Solution Interface | Интерфейс SolutionBuild

...