Я использую teamcity для создания веб-приложения для нескольких сайтов. Приложение встроено в VS с использованием C # и углового интерфейса. Каждый сайт имеет свой профиль публикации с необходимыми настройками. В профиле публикации для SkipExtraFilesOnServer необходимо установить значение false.
Мне нужно запретить удаление определенной папки и файлов в ней и не удалять значок сайта (каждый сайт имеет свой собственный значок, который мы добавляем, когдасайт сначала настраивается).
Я попытался добавить код в профиль публикации, чтобы пропустить папку и файлы в нем, а также пропустить файл favicon, но он ничего не делает. Я использовал это в другом проекте, и он, кажется, работал нормально, и я не уверен, почему он не работает в этом.
Я попытался установить для SkipExtraFilesOnServer значение true, и он не удалил файлы, ноэто сломало что-то еще. Человек, который изначально настроил эту конфигурацию сборки, пропал, но недавно я установил для нее значение True, и один из разработчиков обнаружил, что их изменения в Angular (это просто комментирование строки) не были отражены в сборке. Единственным изменением был SkipExtraFilesOnServer, поэтому он вернул значение False и построил заново, и все было хорошо. Вот почему нам нужно установить значение False.
В Teamcity шаг публикации использует MSBuild и имеет следующие параметры командной строки.
/p:DeployOnBuild=true
/p:Configuration=Staging
/p:PublishProfile="login-devtest.sitename.com.pubxml"
/p:PublishProfileRootFolder="C:\Users\Administrator\Desktop\Publish Profiles\sitename Dev Test" /p:UserName="XXXXXX" /p:Password="XXXXXXX"
В профиле публикации у меня есть следующее
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<MSDeployServiceURL>http://xx.xxx.xxx.xxx</MSDeployServiceURL>
<DeployIisAppPath>TT_DevTest_Identity</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>
<MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<UserName>xxxxxxxxx</UserName>
<_SavePWD>True</_SavePWD>
<PublishDatabaseSettings>
...
<Target Name="AddCustomSkipRules">
<Message Text="Adding Custom Skip Rules" />
<ItemGroup>
<MsDeploySkipRules Include="SkipFilesInFilesFolder">
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\Content\\Images\\testing\\.*</AbsolutePath>
<Apply>Destination</Apply>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipFoldersInFilesFolders">
<SkipAction></SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\Content\\Images\\.*\\*</AbsolutePath>
<Apply>Destination</Apply>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipFilesInFilesFolder">
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\*.ico</AbsolutePath>
<Apply>Destination</Apply>
</MsDeploySkipRules>
</ItemGroup>
</Target>
...
Я ожидал, что он просто не удалит папку «Тестирование», оставит там какие-либо файлы и оставит значок, но каждый раз, когда он создает его, он удаляет все и просто развертывает сайт как новый. Фавикон - это маленькая вещь, но пользователи загружают изображения в папку (в моем примере это называется тестированием), и они удаляются при сборке и публикации.