131

我想要使​​用 msbuild 构建解决方案的特定项目的命令行,就像我们对 devenv.com 所做的那样。在 devenv.com 中,我们可以使用以下命令行指定解决方案的项目

devenv.com /Build Release|x86 test.sln /project "testproject"

使用上面的命令行,我可以使用 devenv.com 在 test.sln 中构建 testproject。相同解决方案的 msbuild 命令行是什么。

谢谢

4

5 回答 5

227
msbuild test.sln /t:project /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

请注意,分配给/t解决方案中的项目名称,它可以与项目文件名不同。

此外,如如何:使用 MSBuild.exe 在解决方案中构建特定目标中所述:

如果项目名称包含任何字符%, $, @, ;, ., (, ), 或',请将它们替换_为指定目标名称中的 。

您还可以一次构建多个项目:

msbuild test.sln /t:project;project2 /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

要重建或清理,更改/t:project/t:project:clean/t:project:rebuild

于 2013-10-23T06:29:19.170 回答
20

MSBuild 实际上是通过使用项目而不是解决方案来工作的。该解决方案仅用于在内部将其解析为 MSBuild 中的临时项目文件。您应该能够通过执行以下命令直接通过 MSBuild 构建感兴趣的项目。

"msbuild testproject /p:Configuration=Release /p:Platform=x86"

我知道你可能会遇到一个主要问题直接使用项目而不是解决方案:如果你使用解决方案来表达项目之间的依赖关系,而不是添加对项目的引用并让构建系统自动计算依赖关系.

如果您使用 sln 文件强制执行构建顺序,我建议将这些依赖项直接处理到 proj 文件中并将它们从 sln.xml 中删除。这将允许您直接从 MSBuild 调用任何 proj 文件,并且项目将全部独立构建而无需任何额外工作。您确实应该将 sln 文件视为一组项目,以使在 Visual Studio 中的工作更容易,而不是作为构建输入。

于 2012-12-19T15:22:40.847 回答
8

作为信息发布给未来的求职者

将以下内容添加到构建脚本并运行一次。这将生成 msbuild 实际使用的确切目标和其他信息。

例如:如果您.在项目名称或文件夹中有 msbuild 将_代替..

set MSBuildEmitSolution=1

获取信息后,使用所需的详细信息更新构建脚本。

于 2016-11-02T05:12:41.703 回答
4

为此,您需要知道项目的目标名称是什么,而不一定是项目名称。

找出这一点的一种方法是在将一个特殊的环境变量设置MSBuildEmitSolution1.

set MSBuildEmitSolution=1
msbuild my_stuff.sln /t:rebuild /p:Configuration=Release /p:Platform=x64

由于嵌套目录中的目标名称非常具体,我最近不得不这样做。所以从我生成的文件中,my_stuff.sln.metaproj我找到了这一行:

<Target Name="Utils\Firewall\FirewallUtils:Rebuild">

这意味着要使用的命令行最终是,

msbuild my_stuff.sln /t:Utils\Firewall\FirewallUtils:Rebuild /p:Configuration=Release /p:Platform=x64
于 2019-03-26T22:10:32.067 回答
1

只是为了添加更多信息,在项目文件夹中执行 msbuild 将默认构建项目文件,因为它是那里唯一的一个。

>msbuild

以这种方式使用 msbuild 有很多变体。您可以直接指定 proj 文件。

>msbuild helloworld.csproj -t:Build.

查看 msbuild 文档以了解用法、项目文件要求以及构建项目而不是解决方案的好处。

MS MSBuild 文档

正如上面的 mark-smith 所提到的,以这种方式构建是有好处的。

于 2019-03-19T19:16:30.307 回答