Ignore o arquivo de Excluir durante o WebDeploy
-
15-11-2019 - |
Pergunta
Estou usando o TeamCity para criar e implantar uma coleção de aplicativos MVC via MSBuild e WebDeploy.
Em uma etapa anterior à minha solução Build / Deploy, copio um app_offline.htm para o diretório de implantação para que eu possa executar atualizações SQL e outras etapas de gerenciamento da Web / Solution, incluindo a compilação.
Uma das configurações na WebDeploy é excluir arquivos que não estão incluídos no projeto ou não necessários para executar o site.Isso exclui meu arquivo app_offline.htm de cada vez.Enquanto eu entendo isso é uma espécie do resultado desejado, há uma maneira de excluir este arquivo de ser excluído do diretório de implementação na implantação?
Eu tentei adicionar um grupo de itens com a opção ExcludeFromackageFiles, sem resultados.
Solução
I had a similar problem, wanting to keep minified javascript files in the deployment package even though they're not part of the project.
I added a custom MSBuild target for this, that works for me:
<!-- ====== Package the minify files ===== -->
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles1;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<PropertyGroup>
<AfterAddIisSettingAndFileContentsToSourceManifest>
MakeEmptyFolders
</AfterAddIisSettingAndFileContentsToSourceManifest>
</PropertyGroup>
<Target Name="CustomCollectFiles1">
<ItemGroup>
<!-- =====Controls\Javascript folder ==== -->
<_CustomFilesForRootFolder Include=".\Controls\Javascript\*.min.js">
<DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension) </DestinationRelativePath>
</_CustomFilesForRootFolder>
<FilesForPackagingFromProject Include="%(_CustomFilesForRootFolder.Identity)">
<DestinationRelativePath>.\Controls\Javascript\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Outras dicas
This other question " Custom app_offline.htm file during publish " suggests one possible way for the final result you describe:
I use my own
app_offline.htm_
file in the solution, which gets published. My deployment script then renames it (removing the trailing _) to make it active.
I can then run my db scripts/do whatever then rename the file bringing the site back.