【问题标题】:Devenv build command for more than one configuration用于多个配置的 Devenv 构建命令
【发布时间】:2012-03-20 03:21:40
【问题描述】:

有没有办法发出一个命令行来构建一个包含所有配置的解决方案?

目前我们有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

理想情况下只有一个命令行。我尝试将所有配置名称放在一起,以空格分隔,但没有成功。

【问题讨论】:

    标签: visual-studio visual-studio-2010 msbuild devenv


    【解决方案1】:

    没有语法(我知道,并且我可以通过测试发现)一次构建多个配置。 MSBuild 中的配置属性似乎也不支持多个值。

    为什么不直接将您需要的命令放入批处理文件、powershell 脚本甚至另一个 MSBuild 文件并启动它?

    【讨论】:

    • 这就是决定要做的事情。谢谢。
    【解决方案2】:

    尝试使用称为“混合平台”的解决方案级平台。 See this post。 如果您有更多配置并且每个项目都使用不同的配置,这将很有帮助。

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

    【讨论】:

      【解决方案3】:

      不知道,也许对某人有用:

      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 &lt;Solution pathname&gt;

      或者只是

      BuildVCSolution.js &lt;Solution pathname&gt;

      如果 cscript.exe 是默认的脚本宿主服务器。

      例如:

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

      在 Windows 7 x64 SP1 上使用 Visual Studio 2010 SP1 进行测试。

      【讨论】:

        猜你喜欢
        • 2023-03-30
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 2018-05-25
        • 2023-03-18
        • 2010-12-25
        • 2012-06-17
        相关资源
        最近更新 更多