使用msbuild指定解决scheme的项目文件

我想要命令行使用msbuild来构build一个解决scheme的特定项目,就像我们在devenv.com中所做的那样。devenv.com我们可以使用下面的命令行来指定一个解决scheme的项目

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

使用上面的命令行,我可以使用devenv.com.tw在test.sln中构buildtestproject。同样的解决scheme是msbuild的命令行。

谢谢

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

请注意,分配给/t是解决scheme中的项目名称,它可以与项目文件名称不同。
如果它包含一个点,则用下划线replace它。

来自@Watusimoto的重要评论:
如果你的项目有一个. (点),用/ t指定时用_ (下划线)代替

您也可以一次构build多个项目:

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

要重build或清理,请将/t:project更改为/t:project:clean/t:project:rebuild

实际上MSBuild通过使用项目而不是解决scheme。 该解决scheme仅用于将其parsing到MSBuild内部的临时项目文件中。 您应该能够通过执行以下命令直接通过MSBuildbuild立感兴趣的项目。

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

我知道你可以直接使用项目来解决一个主要问题,而不是解决scheme:如果使用解决scheme来表示项目之间的依赖关系,而不是添加对项目的引用,并让构build系统自动运行依赖关系。

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

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

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

例如:如果你有'。' 在项目名称或文件夹msbuild将期望“_”代替“。”。

设置MSBuildEmitSolution = 1

获取信息后,更新构build脚本与所需的细节。