Odpowiedziałem na podobne, ale inne pytanie na How do you include additional files using VS2010 web deployment packages?.
W scenariuszu, w którym używasz zdarzenia budowania postów, polecam upuszczenie zdarzenia budowania postu i zaimplementowanie działań przy użyciu własnych celów MSBuild zamiast zdarzenia po kompilacji. Poniżej znajdziesz tekst drugiej odpowiedzi.
Od: How do you include additional files using VS2010 web deployment packages?
wielkie pytanie. Właśnie opublikowałem bardzo szczegółowy wpis na blogu o tym pod adresem Web Deployment Tool (MSDeploy) : Build Package including extra files or excluding specific files.
Oto streszczenie. Po dołączeniu plików pokazuję, jak również wykluczyć pliki.
Łącznie dodatkowe pliki
Łącznie dodatkowe pliki do opakowania jest nieco trudniejsze, ale nadal nie bigee jeśli są wygodne z MSBuild, a jeśli nie są następnie przeczytać. W tym celu musimy podłączyć się do części procesu, który zbiera pliki do pakowania. Cel, który musimy rozszerzyć, nazywa się CopyAllFilesToSingleFolder. Ten cel ma właściwość zależności, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, którą możemy wykorzystać i wprowadzić własny cel. Stworzymy cel o nazwie CustomCollectFiles i wprowadzimy go do procesu. Osiągamy to następująco (pamiętaj po wydaniu polecenia importu).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
To doda nasz cel do procesu, teraz musimy zdefiniować sam cel. Załóżmy, że masz folder o nazwie Dodatkowe pliki, który znajduje się na 1 poziomie nad twoim projektem internetowym. Chcesz uwzględnić wszystkie te pliki. Oto cel CustomCollectFiles i omówimy to później.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Oto co zrobiłem było stworzenie _CustomFiles punkt iw atrybutu zawierają powiedziano go odebrać wszystkie pliki w tym folderze i dowolny folder pod nią. Następnie używam tego elementu do zapełnienia elementu FilesForPackagingFromProject. Jest to element, który MSDeploy faktycznie używa do dodawania dodatkowych plików. Zauważ również, że zadeklarowałem wartość metadanych DestinationRelativePath. Określi to względną ścieżkę, którą zostanie umieszczony w pakiecie. Użyłem tutaj instrukcji Extra Files% (RecursiveDir)% (Filename)% (Extension). Oznacza to umieszczenie go w tej samej względnej lokalizacji w pakiecie, jak to jest w folderze Extra Files.
Wykluczanie plików
Jeśli otworzysz plik projektu z aplikacji internetowej stworzonej z VS 2010 w kierunku dna nim znajdziesz linię.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW można otworzyć plik projektu wewnątrz VS. Kliknij prawym przyciskiem myszy na projekt wybierz Rozładuj projekt. Następnie kliknij prawym przyciskiem myszy na rozładowanym projekcie i wybierz Edytuj projekt.
To oświadczenie będzie zawierać wszystkie cele i zadania, których potrzebujemy. Większość naszych dostosowań powinna nastąpić po tym imporcie, jeśli nie jesteś pewien, połóż to później! Więc jeśli masz pliki do wykluczenia, istnieje nazwa przedmiotu, ExcludeFromPackageFiles, które można wykorzystać do tego celu. Na przykład załóżmy, że masz plik o nazwie Sample.Debug.js, który jest zawarty w aplikacji internetowej, ale chcesz, aby ten plik został wykluczony z utworzonych pakietów. Możesz umieścić poniższy fragment po tym poleceniu importu.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Deklarując zapełnienie tego elementu, pliki zostaną automatycznie wykluczone. Zwróć uwagę na użycie metadanych FromTarget tutaj. Nie będę tu wchodził, ale powinieneś o tym wiedzieć.
Jeśli używasz * pre * -build wydarzenie zamiast, to wydaje się działać jak chcesz już podoba (Visual Studio 2013, ASP.NET szablon projektu). – bzlm
Wygląda na to, że usunęły one wbudowane zachowanie wspomniane w powyższym komentarzu w programie Visual Studio 2015 i nowszych wersjach. – justdan23