【问题标题】:How do you automate a Visual Studio build?如何自动化 Visual Studio 构建?
【发布时间】:2010-09-06 16:16:06
【问题描述】:

如何将在 IDE 中执行的 Visual Studio 构建转换为可以从命令行运行的脚本?

【问题讨论】:

    标签: visual-studio build-automation


    【解决方案1】:

    使用 VS2008 你可以这样做:

    devenv solution.sln /build configuration
    

    【讨论】:

    【解决方案2】:
    \Windows\Microsoft.NET\Framework\[YOUR .NET VERSION]\msbuild.exe
    

    很多命令行参数,但最简单的只是:

    msbuild.exe yoursln.sln
    

    【讨论】:

      【解决方案3】:

      最简单的方法:导航到包含解决方案或项目文件的目录,然后运行msbuild(假设您有 Visual Studio 2005 或更高版本)。

      更灵活的方式:

      • 阅读the MSBuild reference。有吨 定制,尤其是一次 你已经安装了MSBuild Community Tasks Project
      • 使用NAnt。它已经存在 比 MSBuild 更长,并且拥有更多 社区支持,但需要你 开始一个项目文件 从头开始,而不是扩展 现有的,由 Visual Studio 创建的。

      【讨论】:

        【解决方案4】:

        这是我用来通过批处理脚本为同一解决方案完全自动化 x86 和 x64 配置的命令行构建的脚本。

        这基于 DevEnv.exe,因为如果您的构建中有安装项目(msbuild 不支持构建安装项目),它就可以工作。

        我假设您的设置是 32 位 Windows 7 和 Visual Studio 2010 设置,使用 x86 本机编译器和 x64 交叉编译器。 如果您运行的是 64 位 Windows,您可能需要在批处理脚本中将 x86_amd64 更改为 amd64,具体取决于您的设置。 这是假设 Visual Studio 安装在 Program Files 中并且您的解决方案位于 D:\MySoln

        创建一个名为 buildall.bat 的文件并将其添加到其中:

        D:
        cd "D:\MySoln"
        
        if "%1" == "" goto all
        if %1 == x86 goto x86
        if %1 == x64 goto x64
        
        :x86
        %comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 < crosscompilex86.bat
        goto eof
        
        :x64
        %comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompilex64.bat
        goto eof
        
        :all
        %comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 < crosscompilex86.bat
        if %ERRORLEVEL% NEQ 0 goto eof
        %comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompilex64.bat
        goto eof
        
        :eof
        pause
        

        现在再创建 2 个批处理脚本:

        crosscompilex86.bat 构建 x86 构建的 Release 版本并包含此

        devenv MySoln.sln /clean "Release|x86"
        IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
        devenv MySoln.sln /rebuild "Release|x86"
        IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
        

        crosscompilex64.bat 构建 x64 构建的 Release 版本并包含此

        devenv MySoln.sln /clean "Release|x64"
        IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
        devenv MySoln.sln /rebuild "Release|x64"
        IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
        

        现在将所有 3 个批处理文件与 MySoln.sln 一起放在您的解决方案文件夹中。 您可以通过在桌面上创建运行以下命令的快捷方式来构建 x86 和 x64 发布版本:

        • 全部构建 -> D:\MySoln\buildall.bat
        • 仅构建 x86 版本 -> D:\MySoln\buildall.bat x86
        • 仅构建 x64 版本 -> D:\MySoln\buildall.bat x64

        如果您使用的是 AnyCPU 等其他配置,则需要相应地自定义上述脚本。

        【讨论】:

        • 嗯,我想我以前没有见过有人将批处理文件通过管道传输到 cmd.exe 中。这其实很聪明。
        【解决方案5】:

        NAntMSBuild 是在 .NET 中自动化构建的最受欢迎的工具,您可以在其中找到关于专业人士的讨论/ Stack Overflow 问题中每个问题的缺点 Best .NET build tool

        【讨论】:

          【解决方案6】:

          查看构建工具 NAntMSBuild。我相信 MSBuild 是 Visual Studio 2005 及更高版本的构建工具。不过,我是 NAnt 的粉丝……

          【讨论】:

          • NAnt 只是 MSBuild 的一个包装器(因此构建任务的名称是 &lt;msbuild&gt;),但 NAnt 很酷,因为它让您可以更轻松地执行其他操作使用自定义 msbuild 任务。
          【解决方案7】:

          看看 Uppercut。它物超所值,它可以满足您的需求,甚至更多。

          UppercuT 使用 NAnt 进行构建,它是极其容易使用的构建框架。

          自动化构建就像 (1) 解决方案名称、(2) 源代码管理路径、(3) 大多数项目的公司名称一样简单!

          http://projectuppercut.org/

          这里有一些很好的解释:UppercuT

          【讨论】:

            【解决方案8】:

            这是我使用 msbuild 进行 VS 2010 调试配置的批处理文件:

            "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" 
            iTegra.Web.sln /p:Configuration=Debug /clp:Summary /nologo
            

            【讨论】:

              【解决方案9】:

              截至Visual Studio 2005,所有项目文件(至少对于基于.NET 的项目)都是实际的MSBuild 文件,因此您可以在命令行上调用MSBuild 并将项目文件传递给它。

              最重要的是,如果您想真正控制构建过程,则需要使用“构建脚本语言”,如 NAnt 或 MSBuild(还有其他,但这些是目前主流的) .

              【讨论】:

                【解决方案10】:

                我必须为 Visual Studio 2003 中的 C++ 项目执行此操作,所以我不知道这与更高版本的 Visual Studio 有多大关系:

                在创建可执行文件的目录中会有一个BuildLog.htm 文件。在浏览器中打开该文件,然后打开每个部分,例如:

                Creating temporary file "c:\some\path\RSP00003C.rsp" with contents
                [
                /D "WIN32" /D "_WINDOWS" /D "STRICT" /D "NDEBUG" ..... (lots of other switches)
                .\Project.cpp
                .\Another.cpp
                .\AndAnother.cpp
                ".\And Yet Another.cpp"
                ]
                Creating command line "cl.exe @c:\some\path\RSP00003C.rsp /nologo"
                

                用方括号(但不包括方括号)之间的内容创建一个 .rsp 文件,然后随意命名。我似乎记得绝对路径有问题,所以您可能必须确保所有路径都是相对的。

                然后在您的构建脚本中添加来自 BuildLog.htm 文件的命令行,但使用您的 .rsp 文件名:

                cl.exe @autobuild01.rsp /nologo
                

                (请注意,还有一个 link.exe 部分以及 cl.exe)

                【讨论】:

                  【解决方案11】:

                  更简单的方法是更改​​ VS 2015 Projects & Solutions 配置: 转到工具选项卡 -> 选项 -> 项目和解决方案 -> 构建和运行 -> 运行时,当项目过期时(选择始终构建)。瞧!

                  现在,您的 IDE 将在您运行 (F5) 时自动构建您的项目。希望这有帮助,欢迎任何反馈。

                  【讨论】:

                    猜你喜欢
                    • 2016-12-17
                    • 2013-11-22
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-11-02
                    • 2011-09-15
                    • 1970-01-01
                    • 2018-06-02
                    • 2012-09-23
                    相关资源
                    最近更新 更多