【问题标题】:Build Visual Studio project through the command line通过命令行构建 Visual Studio 项目
【发布时间】:2011-08-05 21:36:49
【问题描述】:

我从 Windows Server 2008 安装运行 ASP.NET 网站,我喜欢通过命令行编辑页面,因为我通过 ssh 进入服务器。

我在服务器上安装了Vim,以便我可以轻松地编辑文件。如果我编辑 HTML 和 CSS 以及 .aspx 页面,则更新成功。但是如果我想编辑源代码,我将不得不重建项目。重建项目可以很好地重新编译所有内容并更新网络上的副本。这是一个开发服务器,所以更新一切都很好,因为没有人看到这个服务器。

如何通过命令行构建项目来更新源代码并在服务器上构建?

该项目是用 C# 编写的,所有文件都在 wwwroot 文件夹中,因此在构建后无需进行文件移动。

【问题讨论】:

    标签: c# build windows-server-2008 command cmd


    【解决方案1】:

    安装 .NET SDK 并使用 MsBuild.exe 命令行工具。它是您构建项目或解决方案时 Visual Studio 使用的。

    【讨论】:

    • 不一定。至少 Visual Studio 能够构建一些 MSBuild 无法构建的项目类型(例如,设置项目)。不过,您可以调用devenv 进行编译。
    • 我相信 msbuild.exe 附带 ~~Framework~~ (仅)安装,而不是 ~SDK。见csharp411.com/where-to-find-msbuild-exe。它开始包含在 2.0 及更高版本中。 Aka,SDK 安装可能是不必要的。
    • Joey 是正确的,msbuild.exe 将构建〜大多数应用程序。这是我遇到的 msbuild.exe 不起作用的示例。 “.rulep”是自定义 IBM 应用程序(项目)类型,必须使用 devenv.exe ibm.com/developerworks/forums/… 构建
    • 我安装了 .net sdk,但是当我在 cmd 中键入 msbuild 或 msbuild.exe 时,环境变量仍未注册
    • 您是否查看或尝试过本文后面列出的 .bat 文件解决方案?
    【解决方案2】:

    创建一个名为 .bat 的文件: Manual_MSBuild_ReleaseVersion.bat

    把它放在 .bat 文件中。

    REM you'll have to find the "latest" version of where msbuild.exe resides on your machine.. here are some popular versions/locations
    REM set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v2.0.50727
    REM set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v3.5
    REM set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319
    REM set msBuildDir=C:\Program Files (x86)\MSBuild\12.0\Bin
    set msBuildDir=C:\Program Files (x86)\MSBuild\14.0\Bin
    
    call "%msBuildDir%\msbuild.exe"  MySolution.sln /p:Configuration=Release /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_ReleaseVersion_LOG.log
    set msBuildDir=
    

    您可以构建 .sln 文件或 .csproj 文件。 MySolution.sln 或 MyProject.csproj

    请参阅 How to: Use MSBuild to Create a Web Package 了解更多信息。

    你可以更进一步:

    rd .\BuildResults /S /Q
    md .\BuildResults
    rd .\MyProject\Bin\Release  /S /Q
    
    REM you'll have to find the "latest" version of where msbuild.exe resides on your machine.. here are some popular versions/locations
    REM set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v2.0.50727
    REM set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v3.5
    REM set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319
    REM set msBuildDir=C:\Program Files (x86)\MSBuild\12.0\Bin
    set msBuildDir=C:\Program Files (x86)\MSBuild\14.0\Bin
    call "%msBuildDir%\msbuild.exe"  MySolution.sln /p:Configuration=Release /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_ReleaseVersion_LOG.log
    set msBuildDir=
    
    XCOPY .\MyProject\Bin\Release\*.* .\BuildResults\
    

    这样,您删除一个目录(只是为了确保您获得超级干净的构建),创建它,构建解决方案/项目,然后将构建结果复制到新目录。

    每次都超级新鲜。如果构建失败,\BuildResults 目录是空的。

    还有一个微妙的小指标,\BuildResults 目录的日期时间是您最后一次构建(或尝试构建)解决方案/项目的时间。微妙,但有时很有帮助。

    【讨论】:

    • 使用 Visual Studio 命令提示符,我能够在不创建 .bat 文件的情况下构建我的解决方案。 MSBuild "MySolution.sln" /P:Configuration=Debug
    • granadaCoder 实际上 .bat 文件很棒,因此不必继续使用 Visual Studio 命令提示符。也很高兴拥有该日志文件。谢谢
    • 另一个有用的设置是/t:Clean,Build这将清理和重建msbuild.exe MySolution.sln /t:Clean,Build
    • Clean and Build 上的好发现!
    • 我在答案中添加了 RD .\MyProject\Bin\Release\ /S /Q 来解决这个问题。好点,谢谢,。
    【解决方案3】:

    也许用这个命令:

      >> devenv myproject.sln /Build "Release|x86"
    

    您可以在“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe”路径中找到 devenv。

    【讨论】:

    • 使用Visual Studio命令提示符(Developer Command Prompt)无需查找devenv.exe的路径
    【解决方案4】:

    我使用了上面@granadaCoder 对答案的修改。

    对于 .NET 4.5 及以上版本,在

    中没有对应的构建目录

    %WINDIR%\Microsoft.NET\Framework\

    并且将 MSBuild 用于较旧的框架不会让您编译较新的结构,例如插值字符串。

    要解决这个问题,您需要安装最新的 MS Build Tools(目前为 2015)并在

    中使用 MSBuild.exe

    %programfiles(x86)%\MSBuild\14.0\Bin

    【讨论】:

    • 感谢您及时更新答案............随着 msbuild.exe 位置的变化。
    • 您还必须将%msBuildDir%\msbuild.exe 放在双引号中
    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多