通过命令行构建 Visual Studio 项目

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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 放在双引号中

以上是关于通过命令行构建 Visual Studio 项目的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core Visual Studio 项目命令行构建与右键构建相同

swig 和使用 Visual Studio 2017 命令行构建项目

使用命令行创建新的 Visual Studio 模板项目

Visual Studio 2012 命令行构建 - 检测构建失败

C#在控制台应用程序中构建Visual Studio项目

如何从命令行编译 Visual Studio 项目?