我有一些在文件夹中的解决方案文件(*.sln)。如何在不显式指定解决方案名称的情况下为每个解决方案调用msbuild
?通常的语法是:
msbuild <solution-name>.sln /P:Configuration=<Debug,Release>
我尝试了这个命令,但显然不支持:
msbuild *.sln /P:Configuration=<Debug,Release>
有没有办法在不知道解决方案名称的情况下执行msbuild?
我有一些在文件夹中的解决方案文件(*.sln)。如何在不显式指定解决方案名称的情况下为每个解决方案调用msbuild
?通常的语法是:
msbuild <solution-name>.sln /P:Configuration=<Debug,Release>
我尝试了这个命令,但显然不支持:
msbuild *.sln /P:Configuration=<Debug,Release>
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>
Get-ChildItem -Recurse *.sln | ForEach-Object $_ { msbuild $_ }