Команда сборки Devenv для более чем одной конфигурации - PullRequest
3 голосов
/ 01 марта 2012

Есть ли способ выдачи одной командной строки для построения решения со всеми его конфигурациями?

В настоящее время у нас есть 5 конфигураций, поэтому нам нужно выполнить 5 команд в следующем формате:

C:\Program Files\Microsoft Visual Studio 10.0\VC>devenv /Rebuild [configuration name] C:\Solutions\SolutionName.sln

, например:

devenv /Rebuild Debug C:\Solutions\SolutionName.sln
devenv /Rebuild DEV C:\Solutions\SolutionName.sln
devenv /Rebuild SIT C:\Solutions\SolutionName.sln
devenv /Rebuild BAT C:\Solutions\SolutionName.sln
devenv /Rebuild PROD C:\Solutions\SolutionName.sln

В идеале просто иметькомандная строка.Я безуспешно пытался соединить все имена конфигурации, разделив их пробелами.

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Нет синтаксиса (который я знаю, и который я мог бы обнаружить при тестировании), чтобы создавать более одной конфигурации одновременно. Свойство конфигурации в MSBuild также не поддерживает несколько значений.

Почему бы просто не поместить нужные команды в командный файл, скрипт powershell или даже в другой файл MSBuild и запустить его?

0 голосов
/ 05 декабря 2014

Не знаю, может быть кому-нибудь пригодится:

BuildVCSolution.js

var objNamedArguments = WScript.Arguments.Named;
var objUnnamedArguments = WScript.Arguments.Unnamed;
var fKeepSUO = objNamedArguments.Exists("KeepSUO");
if (objNamedArguments.Length > 1 || (objNamedArguments.Length == 1 && fKeepSUO == false) || objUnnamedArguments.Length != 1)
{
    WScript.Echo("\nUsage: " + WScript.ScriptName + " <Solution Pathname> [/KeepSUO]\n");
    WScript.Quit();
}
var objFSO =  WScript.CreateObject("Scripting.FileSystemObject");
var strSolutionPathName = objFSO.GetAbsolutePathName(objUnnamedArguments(0));
var objDTE = WScript.CreateObject("VisualStudio.DTE");
var objTextEditorCAndCPPDisableDatabaseProperty = objDTE.Properties("TextEditor", "C/C++ Specific").Item("DisableDatabase");
var fDisableDatabase = objTextEditorCAndCPPDisableDatabaseProperty.Value;
objTextEditorCAndCPPDisableDatabaseProperty.Value = true;
var objSolution = objDTE.Solution;
objSolution.Open(strSolutionPathName);
var objSolutionBuild = objSolution.SolutionBuild;
var objSolutionBuildConfigurations = objSolutionBuild.SolutionConfigurations;
var objBuildOutputWindowPane = objDTE.Windows.Item("{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}").Object.OutputWindowPanes.Item("Build");
objBuildOutputWindowPane.Activate();
for (var i = 0; i < objSolutionBuildConfigurations.Count; i ++)
{
    var objSolutionBuildConfigurationContexts = objSolutionBuildConfigurations.Item(i + 1).SolutionContexts;
    for (var j = 0; j < objSolutionBuildConfigurationContexts.Count; j ++)
    {
        var objSolutionBuildConfigurationContext = objSolutionBuildConfigurationContexts.Item(j + 1);
        if (objSolutionBuildConfigurationContext.ShouldBuild)
        {
            var strSolutionBuildConfigurationFullName = objSolutionBuildConfigurationContext.ConfigurationName + "|" + objSolutionBuildConfigurationContext.PlatformName;
            objSolutionBuild.BuildProject(strSolutionBuildConfigurationFullName, objSolutionBuildConfigurationContext.ProjectName, true);
            WScript.Echo(objBuildOutputWindowPane.TextDocument.StartPoint.CreateEditPoint().GetText(objBuildOutputWindowPane.TextDocument.EndPoint));
        }
    }
}
objSolution.Close();
objTextEditorCAndCPPDisableDatabaseProperty.Value = fDisableDatabase;
objDTE.Quit();
if (fKeepSUO == false)
{
    var strSUOPathName = objFSO.BuildPath(objFSO.GetParentFolderName(strSolutionPathName), objFSO.GetBaseName(strSolutionPathName)) + ".suo";
    objFSO.DeleteFile(strSUOPathName);
}

Этот сценарий WSH демонстрирует использование базовой объектной модели автоматизации Visual Studio 2010 для создания проектов. Основная цель этого скрипта - построить решение со всеми конфигурациями его проектов с помощью одной командной строки. Дополнительные методы используются для отображения журнала сборки и подавления создания файлов .sdf и .suo (при желании можно сохранить файл .suo).

Использование:

cscript.exe BuildVCSolution.js <Solution pathname>

или просто

BuildVCSolution.js <Solution pathname>

если cscript.exe является хост-сервером скриптов по умолчанию.

Например:

BuildVCSolution.js "D:\Development\Projects\Sample Application\SampleApplication.sln"

Протестировано с Visual Studio 2010 SP1 в Windows 7 x64 SP1.

0 голосов
/ 02 марта 2012

Попробуйте использовать платформу уровня решения под названием «Смешанные платформы». Смотрите это сообщение . Это полезно, если у вас есть больше конфигураций, и каждый проект использует свою конфигурацию.

  msbuild.exe MixedProjects.sln /p:"Platform=Mixed Platforms" /p:Configuration=Debug
...