Question

Existe-t-il un moyen d'émettre une ligne de commande pour créer une solution avec toutes ses configurations?

Actuellement, nous avons 5 configurations, nous devons donc émettre les 5 commandes au format suivant:

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

tel que:

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

Idéalement, avoir une seule ligne de commande. J'ai essayé sans succès de rassembler tous les noms de configuration, l'espace délimité.

Était-ce utile?

La solution

Il n'y a pas de syntaxe (que je connais, et que je pourrais découvrir par test) pour créer plus d'une configuration à la fois. La propriété de configuration dans MSBuild ne semble pas non plus prendre en charge plusieurs valeurs.

Pourquoi ne pas simplement mettre les commandes dont vous avez besoin dans un fichier batch, un script PowerShell ou même un autre fichier MSBuild et le lancer?

Autres conseils

Essayez d'utiliser la plate-forme au niveau de la solution appelée "plates-formes mixtes". Voir ce post. Ceci est utile si vous avez plus de configurations et que chaque projet utilise la configuration différente.

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

Je ne sais pas, ce serait peut-être utile pour quelqu'un:

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);
}

Ce script WSH démontre l'utilisation du modèle d'objet Visual Studio 2010 Core Automation pour la construction de projets. L'objectif principal de ce script - est de créer une solution avec toutes ses configurations de projets via une ligne de commande. Des techniques supplémentaires sont utilisées pour afficher le journal de construction et supprimer la création de fichiers .sdf et .suo (éventuellement, le fichier .suo peut être conservé).

Usage:

cscript.exe BuildVCSolution.js <Solution pathname>

ou juste

BuildVCSolution.js <Solution pathname>

Si cscript.exe est le serveur hôte de script par défaut.

Par exemple:

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

Testé avec Visual Studio 2010 SP1 sur Windows 7 X64 SP1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top