【问题标题】:MSBuild - Copy All Bin Output - Debug|ReleaseMSBuild - 复制所有 Bin 输出 - 调试|发布
【发布时间】:2012-11-29 04:24:05
【问题描述】:

我有以下 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>

【问题讨论】:

    标签: .net msbuild build-script


    【解决方案1】:
    1. 在你的目标文件中定义Configuration属性默认值
    2. 在输出路径中使用此属性值
    3. 而不是AfterTargets 使用DependsOnTargets,而是作为默认目标定义最后一个,因此目标将以相同的顺序执行,但只是以相反的顺序链接
    4. 将下面的 XML 保存为 final.targets 或您希望如何命名它
    5. 在命令行中运行 msbuild final.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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多