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

时间:2012-11-28 15:33:07

标签: .net msbuild build-script

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

如何在Default之后添加一个额外的步骤,将其中一个项目的所有\bin\Debug\bin\Release复制到名为binaries的文件夹中,该文件夹与{ {1}}文件已运行?

如果我能更好地了解它是否更好地使用Debug或Release。

更新:我已经更新了我到目前为止所获得的代码。仍然很高兴能够运行.bat文件,在两种操作模式下关闭这个msbuild:Release和Debug然后在Binaries文件夹中有两个不同的文件夹

.targets

1 个答案:

答案 0 :(得分:1)

  1. 在目标文件中定义Configuration属性默认值
  2. 在输出路径中使用此属性值
  3. 而不是AfterTargets使用DependsOnTargets,而是默认目标定义最后一个,所以目标将以相同的顺序执行,但只是以相反的顺序链接
  4. 将以下格式保存为final.targets或您希望如何命名
  5. 在命令行中运行msbuild final.targets /p:Configuration=RELEASE以进行发布配置构建
  6. <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>