如何在解决方案名称(* .sln)上使用通配符调用msbuild?

时间:2015-08-07 00:26:34

标签: command-line msbuild

我在文件夹中有一些解决方案文件(* .sln)。如何在不明确指定解决方案名称的情况下为每个人调用msbuild?通常的语法是:

msbuild <solution-name>.sln /P:Configuration=<Debug,Release>

我尝试过这个命令,但显然不支持:

msbuild *.sln /P:Configuration=<Debug,Release>

无论如何在不知道解决方案名称的情况下执行msbuild?

1 个答案:

答案 0 :(得分:3)

使用for循环在命令行上迭代dir *.sln的结果:

for %i in ( dir *.sln ) do ( msbuild %i /p:Configuration=Debug )

或使用msbuild文件执行相同操作。最后,这可能会更有趣,因为它允许更多的调整和自动化。例如,下面显示的代码会自动构建调试版和发行版,并且可以进行更多扩展。您也可以传递目录以扫描解决方案,默认情况下,它会选择msbuild文件所在的目录。在命令行或使用批处理文件时,这些事情变得更加困难和丑陋。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">

  <PropertyGroup>
    <!-- directory where the solution files are -->
    <SlnDir Condition="'$(SlnDir)' == ''">$(MSBuildThisFileDirectory)</SlnDir>
  </PropertyGroup>

  <ItemGroup>
    <!-- list solution files -->
    <ProjectFiles Include="$(SlnDir)\*.sln"/>
    <!-- list configurations to build -->
    <Configurations Include="Debug;Release"/>
  </ItemGroup>

  <Target Name="Build">
    <MSBuild Projects="@(ProjectFiles)" Targets="Cli" Properties="Configuration=%(Configurations.Identity)"/>
  </Target>

</Project>