Проект веб-развертывания - копирование файлов после сборки - PullRequest
8 голосов
/ 08 октября 2009

В настоящее время я настроил проект веб-развертывания, который компилирует код в папку .\Release. После сборки я хочу скопировать файлы на другой компьютер (потому что каталог, в который вы строите, удаляется, а затем воссоздается).

ItemGroup для определения, какие файлы для копирования настроены следующим образом:

<ItemGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <ReleaseFiles Include=".\Release\**\*" />
    <OverrideFiles Include="..\website\App_Code\override\site.com\**\*" />
</ItemGroup>

'веб-сайт' - это код, который используется для нескольких сайтов, поэтому в рамках решения настроено несколько проектов веб-развертывания.

Затем у меня есть цель AfterBuild для копирования файлов:

<Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Copy SourceFiles="@(ReleaseFiles)" ContinueOnError="true" SkipUnchangedFiles="true" DestinationFiles="@(ReleaseFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" />
    <Copy SourceFiles="@(OverrideFiles)" DestinationFiles="@(OverrideFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>

Однако файлы ReleaseFiles не копируются, что может быть причиной этого? У меня была ошибка .\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process., где folder\subfolder может каждый раз отличаться, но даже когда это сообщение не появляется, файлы все равно не копируются.

Проблема в том, что это работало раньше.

1 Ответ

9 голосов
/ 08 октября 2009

Основная проблема заключается в том, что ItemGroup в вашем образце оценивается во время загрузки файла MSBuild - и в это время, скорее всего, эти файлы еще не существуют .....

Поэтому ваши коллекции "ReleaseFiles" и "OverrideFiles" пусты, и тогда ничего не копируется.

Что вам нужно сделать, это динамически создать ваши ItemGroups после сборка произошла (и файлы, на которые есть ссылки, действительно присутствуют):

<CreateItem Include=".\Release\**\*">
   <Output TaskParameter="Include" ItemName="ReleaseFiles"/>
</CreateItem>
<CreateItem Include="..\website\App_Code\override\site.com\**\*">
   <Output TaskParameter="Include" ItemName="OverrideFiles"/>
</CreateItem>

Теперь у вас все будет в порядке, и задача копирования должна работать.

Марк

...