2013-02-28 4 views
2

Я развертываю некоторые файлы на сервере. Но когда я делаю это, сборка удаляет все файлы и папку, которые находятся в этом месте. Я не хочу удалять все файлы с сервера. Я хочу исключить из папки назначения одну папку (имя папки Temp). Папка Temp не должна удаляться при удалении других файлов. Как это сделать?Проблема MSBuild при развертывании файлов

Вот TFS сборки Определение

<PropertyGroup Condition=" '$(DeployEnvironment)' == 'Dev' "> 
<DeployPath>\\server1\D$\temp\reports</DeployPath> 
</PropertyGroup> 
<Target Name="CoreCompileSolution" /> 
<Target Name="AfterCompile"> 
    <Message Importance ="high" Text="Solution Root: $(SolutionRoot)" /> 
    <Message Importance ="high" Text="Out Dir: $(OutDir)" /> 
    <Copy SourceFiles="@(RPTFiles)" DestinationFolder="$(OutDir)_PublishedWebsites\Reports\" /> 
</Target> 
<Target Name="AfterDropBuild" > 
    <CreateItem Exclude="$(DeployPath)\Temp*.*"> 
     <Output ItemName="PreviousDeployment" TaskParameter="Include" /> 
    </CreateItem> 
</Target> 
+0

Как вы развертывание этих файлов? Вы используете определение сборки TFS, публикацию из Visual Studio или что-то еще? –

+0

Привет Я использую определение сборки TFS. Это код для того же самого. – user2019295

ответ

1

Почему вы используете задачу копирования? Я думаю, что он предназначен для локальных манипуляций во время сборки, а не для развертывания (поскольку это не дает вам возможности легко настроить поведение).

Я полагаю, что вместо копии tsak использовать один из следующих вариантов

  • Non-веб-приложений - использовать Robocopy: /XD dirs [dirs]...: Исключены каталоги, соответствующие имена/путь. XF и XD могут использоваться в комбинации, например.

    ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S 
    

    см. this link для использования руководство пользователя. Вы либо запустить его из командной строки (используя <Exec Command="" > задачу, или использовать MBuiild Community Tasksproject, который имеет хорошую обертку

  • веб-приложений:.. Вы должны использовать Web Deploy для развертывания Вам либо использовать интеграцию MSBuild (VS 2010 и позже, см. this blog series для руководства по настройке и настройке на VS2010 NB: в VS 2012 он был значительно упрощен, но у меня нет ссылки для обмена на данный момент) или запустить его из командной строки (до VS 2010):

    <Exec Command="&quot;$(WebDeployToolPath)&quot; -verb:sync - source:dirPath='$(MSBuildProjectDirectory)\Published\' -dest:dirPath='$(DeployDirectoryLocalPath)',computerName=$(DeployTargetURL),userName='$(DeployUserName)',password='$(Password)',authType='Basic' -skip:skipaction='Delete',objectname='filePath',absolutepath='app_offline.htm' -skip:skipaction='Delete',objectname='filePath',absolutepath='logs\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='logs\\.*' -skip:skipaction='Delete',objectname='filePath',absolutepath='UserFiles\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='UserFiles\\.*' -verbose -allowUntrusted" />

NB, используя skip:skipaction='Delete.., чтобы пропустить удаление файлов и папок.

Update Похоже, что я имею undestood это немного неправильно (я должен, развертывание в AfterCompile Произошло цели, однако, как я вижу сейчас, TFS использует CoreDropBuild цель сделать развертывание. Так я думаю, то, что вам нужно, чтобы переопределить CoreDropBuild цель, как описано:.. here (хотя, я никогда не пробовал этого)

вы можете использовать Copy задачу в качестве автора резьбы, или идти с Robocopy/webdeploy на основе вашего личные предпочтения

+0

У меня нет опции в моей сборке TFS для опции «ROBOCOPY». – user2019295

+0

ну, вы можете отредактировать файл msbuild, вы вставили выше, не так ли? См. Эту ссылку [поток на форумах msdn] (http://social.msdn.microsoft.com/forums/en-us/tfsbuild/thread/E996A014-0EBD-457B-BFD1-8BC518995A3F) для переопределения задачи CoreDropBuild. – Isantipov

+0

Добавил обновление со ссылкой на форумы MSDN с описанием того, как исключать файлы, переопределяя цель CoreDropBuild – Isantipov

 Смежные вопросы

  • Нет связанных вопросов^_^