如何检索构建Visual Studio项目时使用的命令行

问题描述:

我试图使用Visual Studio 2017构建Visual Studio项目。失败并且错误列表显示了相当一些中文字符。如何检索构建Visual Studio项目时使用的命令行

我知道这些字符是由MSBuild命令的误解导致的,所以我决定自己运行MSBuild命令,以便查看哪些错误消息导致了中文字符,并且为了解决我的问题。因此,如“this relevant * post”中所述,我已将Visual Studio“MSBuild项目构建输出详细程度”修改为“详细”(我甚至把它放在“诊断”)上,但虽然有相当多的信息,我无法从该输出中检索MSBuild命令行。正如我在评论中提到的,我的选项窗口中没有“显示所有设置”复选框。

所以我试着做别的事情:我打开了一个命令提示符,我去了我的Visual Studio项目的位置,在那里我简单地启动了命令“\ MSBuild.exe”。然而,这并不是一个好主意:项目的构建成功,并且警告的数量(864)与预期的警告数量不相符,如Visual Studio(3)的错误列表所示,所以我留下了两个问题:

  1. 我在我的电脑上有不同的MSBuild.exe文件,我怎么知道一个Visual Studio使用哪一个 ? (为了您的信息,当我只需启动“的MSBuild”它没有运行:在我$PATH环境变量没有MSBuild的运行目录)
  2. 我相信一些参数可以用来 同时使用Visual Studio推出的身材,我怎么可以检索 那些来自输出窗口?

与此同时,我发现有一个工具,称为“开发人员命令提示符”。我已经打开这个工具,进入我的项目目录并启动了MSBuild。构建成功,没有错误和零警告,所以也没有给出预期的结果。

在此先感谢

1.I有我的电脑上不同MSBuild.exe文件,我怎么能知道哪一个Visual Studio中使用? (为了您的信息,当我只需启动“的MSBuild”它没有运行:在我的$ PATH环境变量中没有的MSBuild运行目录)

您可以右键点击你的项目,选择“Unload Project”,然后右键单击并选择“Edit xx.csproj”。在项目文件的顶部,你会发现,对于Toolversion声明:

<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

此外,你可以使用“按Ctrl + F”来搜索在输出窗口关键字“MSBuild”(“MSBuild项目建立输出冗长“为”详细“),你会发现更多的条目是MSBuild\15.0

,所以我们可以知道MSBuild.exe 15.0(在C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin定位)所使用的Visual Studio 2017年

2.我相信某些参数同时使用Visual Studio推出的构建中使用,如何我可以从输出窗口中检索那些吗?

是的,使用Visual Studio启动构建时会使用一些参数,例如配置:Dubug/Release;礼貌:Target Framework。您可以使用“Ctrl + F”搜索搜索关键字,在输出窗口中检索这些参数。

如何检索构建Visual Studio项目时使用的命令行 我无法从该输出中检索MSBuild命令行。

就像您提到的那样,我也无法在选项窗口中找到“显示所有设置”复选框。但这并不影响我们从输出中检索命令行。你应该改变“MSBuild项目生成输出的详细程度”为“详细”,然后生成项目,你会发现在输出窗口的命令行,例如(C#项目):

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Roslyn\csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE ... 

后者的命令是真正的问题在这里:运行的命令不是MSBuild.exe <something>,而是csc.exe <something>(C#项目)或CL.exe <something>(C/C++项目)。

为了使这项工作,编译命令必须从目录C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE运行,并且启动编译命令时,不应该忘记双引号以处理目录名称中的空格。