MSBuild - 复制所有二进制输出 - 调试|发布

4
我有以下的MSBuild目标文件(如下)。
在Default步骤之后,如何添加一个额外的步骤来复制一个项目中\bin\Debug\bin\Release的所有内容到一个名为binaries的文件夹中,该文件夹与运行.targets文件的文件夹位于同一级目录下?
如果它能够聪明地判断使用Debug还是Release就更好了。
更新:我已经更新了我的代码并得到了一些进展。希望能够以两种操作模式运行启动这个msbuild的.bat文件:Release和Debug,然后在Binaries文件夹中拥有两个不同的文件夹。
  <ItemGroup>
    <SolutionFiles Include=".\**\*.sln"/>
  </ItemGroup>

  <ItemGroup>
    <DebugBinFiles Include=".\src\Sample.Core\Sample.Core.Infrastructure\bin\Debug\**\*.*"/>
  </ItemGroup>

  <ItemGroup>
    <ReleaseBinFiles Include=".\src\Sample.Core\Sample.Core.Infrastructure\bin\Release\**\*.*"/>
  </ItemGroup>

  <Target Name="Default" AfterTargets="AfterBuild">
    <MSBuild Projects="@(SolutionFiles)" Condition=""/>
  </Target>

  <Target Name="AfterBuild">
    <Copy SourceFiles="@(BinFiles)" DestinationFolder=".\binaries\Debug" />
  </Target>

</Project>
1个回答

2
  1. 在你的目标文件中定义Configuration属性的默认值。
  2. 在输出路径中使用该属性值。
  3. 不要使用AfterTargets,而是使用DependsOnTargets,但将最后一个作为默认目标,这样目标将按相反顺序链接执行。
  4. 将下面的XML保存为final.targets或者您喜欢的名称。
  5. 在命令行中运行msbuildfinal.targets /p:Configuration=RELEASE以进行发布配置构建。
<Project ToolsVersion="4.0"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         DefaultTargets="CopyBinOutput">

   <PropertyGroup>
      <!-- define defaults -->
      <Configuration Condition="$(Configuration)==''">DEBUG</Configuration>
   </PropertyGroup>

   <Choose>
      <When Condition=" '$(Configuration)'=='DEBUG' ">
         <ItemGroup>
            <BinFiles Include=".\src\Sample.Core\Sample.Core.Infrastructure\bin\Debug\**\*.*" />
         </ItemGroup>
      </When>

      <When Condition=" '$(Configuration)'=='RELEASE' ">
         <ItemGroup>
           <BinFiles Include=".\src\Sample.Core\Sample.Core.Infrastructure\bin\Release\**\*.*"/>
          </ItemGroup>
      </When>
  </Choose>

  <Target Name="EntryPointTarget">
      <Message Text="EntryPointTarget started" />
      <!-- here is build your solution -->
  </Target>

  <Target Name="CopyBinOutput" DependsOnTargets="EntryPointTarget">
      <Message Text="CopyBinOutput started" />
     <Copy SkipUnchangedFiles="True" OverWriteReadOnlyFiles="true"
           SourceFiles="@(BinFiles)" 
           DestinationFiles="@(BinFiles->'.\binaries\$(Configuration)\%(RecursiveDir)%(Filename)%(Extension)')" />

      <Message Text="CopyBinOutput finished, destination is .\binaries\$(Configuration)" />
  </Target>

</Project>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接