使用MSBuild生成多个解决方案,并将应用程序复制到单独的文件夹中
我有大约80个控制台应用程序,我想构建并输出到一个保留目录下的单独目标目录使用MSBuild生成多个解决方案,并将应用程序复制到单独的文件夹中,msbuild,visual-studio-2017,console-application,Msbuild,Visual Studio 2017,Console Application,我有大约80个控制台应用程序,我想构建并输出到一个保留目录下的单独目标目录 c:\builds /App1 /App2 /app3 这个脚本进行大规模构建,但我似乎无法让它将完成的输出从发布目录复制到目标目录,也无法将输出直接发送到目标目录 <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
c:\builds
/App1
/App2
/app3
这个脚本进行大规模构建,但我似乎无法让它将完成的输出从发布目录复制到目标目录,也无法将输出直接发送到目标目录
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Solution Include="./**/*.sln">
<Properties>Configuration=Release;Platform=Any CPU</Properties>
</Solution>
<MyReleaseFiles Include=".\bin\release\*.*" Exclude=".\bin\release\*vshost.exe" />
</ItemGroup>
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<MyReleaseOutput>.\release</MyReleaseOutput>
<OutputPath>c:\builds\$(AssemblyName)\</OutputPath>
<OutDir>$(OutputPath)</OutDir>
</PropertyGroup>
<Target Name="Build">
<MSBuild Projects="@(Solution)" BuildInParallel="true" Targets="Build" />
<MakeDir Directories="$(OutputPath)" />
<Copy SourceFiles="@(MyReleaseFiles)" DestinationFolder="$(OutputPath)" />
</Target>
</Project>
配置=释放;平台=任何CPU
释放
任意CPU
释放
c:\builds\$(AssemblyName)\
$(输出路径)
使用MSBuild生成多个解决方案,并将应用程序复制到单独的文件夹中
正如stijn所说,“OutputPath必须在生成的项目中设置,只有在那里它才能在项目上下文中计算$(AssemblyName)”,因此我们不能直接在项目文件外使用它
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Solution Include="./**/*.sln">
<Properties>Configuration=Release;Platform=Any CPU</Properties>
</Solution>
<MyReleaseFiles Include=".\bin\release\*.*" Exclude=".\bin\release\*vshost.exe" />
</ItemGroup>
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<MyReleaseOutput>.\release</MyReleaseOutput>
<OutputPath>c:\builds\$(AssemblyName)\</OutputPath>
<OutDir>$(OutputPath)</OutDir>
</PropertyGroup>
<Target Name="Build">
<MSBuild Projects="@(Solution)" BuildInParallel="true" Targets="Build" />
<MakeDir Directories="$(OutputPath)" />
<Copy SourceFiles="@(MyReleaseFiles)" DestinationFolder="$(OutputPath)" />
</Target>
</Project>
作为一种解决方法,您可以将ItemGroup
与子文件夹一起用于每个项目:
<ItemGroup>
<Projects Include="project1.csproj" />
<Subfolder>project1</Subfolder>
<Projects Include="project2.csproj" />
<Subfolder>project2</Subfolder>
<Projects Include="project3.csproj" >
<Subfolder>project3</Subfolder>
</Projects>
</ItemGroup>
认证:
希望这有帮助。必须在生成的项目中设置OutputPath,只有在那里它才能在项目上下文中计算$(AssemblyName)。也有人问过类似的问题,例如:谢谢你,利奥。很明显,我的想法有点歪。给定一个包含n个子文件夹的应用程序文件夹,每个子文件夹包含一个解决方案,我将构建所有解决方案,并将它们的输出复制到我目前指定的暂存文件夹中。听起来我必须在编写脚本时知道这n个子文件夹是什么。实际上,我所针对的集合或子集合可能会有所不同。瞧,我不能做我想做的事。