4

我有以下 MSBuild 目标文件(如下)。

我将如何在默认之后添加一个额外的步骤,将所有项目\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>
4

1 回答 1

2
  1. 在您的目标文件Configuration属性默认值中定义
  2. 在输出路径中使用此属性值
  3. 而不是AfterTargetsuse 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>
于 2012-11-28T20:17:25.620 回答