Выполнить операцию XCopy после сборки всех проектов в MSBuild

#msbuild

#msbuild

Вопрос:

У меня есть файл .proj, который настроен на выполнение файла решения, который, в свою очередь, создает все проекты в решении. Я хочу добавить операцию XCopy, которая должна копировать .файлы dll всех проектов в другое место только после завершения сборки всех проектов. Я пробовал с помощью ниже, но он не копирует библиотеки DLL. Я новичок в написании тегов MSBuild, поэтому может быть, я ошибаюсь, выбирая этот подход для написания задачи таким образом.

Пожалуйста, предоставьте решение, если кто-нибудь знает.

 <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition="'$(Configuration)' == 'Release|Debug'"/>
    <Platform Condition="'$(Platform)' == ''">x64</Platform>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <SolutionToBuild>
      <Properties>Configuration=$(Configuration);Platform=$(Platform)</Properties>
      <Targets>Clean;Build</Targets>
    </SolutionToBuild>
  </ItemDefinitionGroup>
  <ItemGroup>  
    <SolutionToBuild Include="..SegAlgorithms.sln" />
  </ItemGroup>

  <Target Name="Build"  >
      <MSBuild Projects="@(SolutionToBuild)" Targets="%(SolutionToBuild.Targets)" Properties="%(SolutionToBuild.Properties)" BuildInParallel="false" ContinueOnError="false" />
  </Target>
  <Target Name="Clean">
      <MSBuild Projects="@(SolutionToBuild)" Targets="Clean" Properties="%(SolutionToBuild.Properties)" BuildInParallel="false" ContinueOnError="false" />
  </Target>
  
  
  <PropertyGroup>
    <CopyDestination>..ExternAlgobin$(Configuration)</CopyDestination>
    <CopySource>..SegAlgorithms$(Configuration)DoBin</CopySource>
  </PropertyGroup>
  <ItemGroup>
    <FilesToCopy Include="$(CopySource)*.dll"/>
  </ItemGroup>
  <ItemGroup>
    <CustomBuildStep Include ="@(FilesToCopy)">
      <Message>Copying..</Message>
      <Command> XCOPY %(Identity)  $(CopyDestination) /f  /y </Command>     
    </CustomBuildStep>
  </ItemGroup>
  <PropertyGroup>
    <CustomBuildAfterTargets>Build</CustomBuildAfterTargets>
  </PropertyGroup>  
</Project>
  

Ответ №1:

Думайте о целях как о методах, которые вызываются. Они выполняются последовательно, поэтому вам просто нужно поместить свою копию после сборки решения:

 <Target Name="Build">
      <MSBuild Projects="@(SolutionToBuild)" Targets="%(SolutionToBuild.Targets)" Properties="%(SolutionToBuild.Properties)" BuildInParallel="false" ContinueOnError="false" />        

      <ItemGroup>
         <FilesToCopy Include="..SegAlgorithms$(Configuration)DoBin*.dll" />
      </ItemGroup>
      <Copy SourceFiles="@(FilesToCopy)" DestinationFolder="..ExternAlgobin$(Configuration)" SkipUnchangedFiles="true" />
</Target>
  

Комментарии:

1. Отлично!! Вы спасли мой день… Большое спасибо GazTheDestroyer….. Я поддержал ваш ответ.

2. Вы также должны принять это, потому что это решило вашу проблему