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

Command line 如何在解决方案名称(*.sln)上使用通配符调用msbuild?,command-line,msbuild,Command Line,Msbuild,我在文件夹中有一些解决方案文件(*.sln)。在不明确指定解决方案名称的情况下,如何为它们中的每一个调用msbuild?通常的语法是: msbuild <solution-name>.sln /P:Configuration=<Debug,Release> msbuild.sln/P:配置= 我尝试了此命令,但显然不受支持: msbuild *.sln /P:Configuration=<Debug,Release> msbuild*.sln/P:配置=

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

msbuild <solution-name>.sln /P:Configuration=<Debug,Release>
msbuild.sln/P:配置=
我尝试了此命令,但显然不受支持:

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

是否在不知道解决方案名称的情况下执行msbuild?

使用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>

$(MSBuildThisFileDirectory)

出于我的目的,从MSBuild配置行中删除'Targets=“Cli”'就可以做到这一点