Świetne pytanie. Właśnie opublikowałem bardzo szczegółowy wpis na blogu na ten temat w Web Deployment Tool (MSDeploy): Build Package zawierający dodatkowe pliki lub wykluczający określone pliki .
Oto streszczenie. Po dołączeniu plików pokazuję również, jak wykluczyć pliki.
W tym dodatkowe pliki
Włączanie dodatkowych plików do pakietu jest nieco trudniejsze, ale nadal nie jest to ważne, jeśli czujesz się komfortowo z programem MSBuild, a jeśli nie, przeczytaj to. Aby to zrobić, musimy podłączyć się do części procesu, która 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 wstrzyknąć własny cel. Dlatego utworzymy cel o nazwie CustomCollectFiles i wstrzykniemy go do procesu. Osiągamy to w następujący sposób (pamiętaj po instrukcji import).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
To doda nasz cel do procesu, teraz musimy zdefiniować sam cel. Załóżmy, że masz folder o nazwie Extra Files, który znajduje się 1 poziom nad projektem sieci Web. Chcesz dołączyć wszystkie te pliki. Oto cel CustomCollectFiles i omówimy później.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Tutaj utworzyłem element _CustomFiles iw atrybucie Include powiedziałem mu, aby podniósł wszystkie pliki w tym folderze i każdy folder znajdujący się pod nim. Jeśli przypadkiem chcesz coś wykluczyć z tej listy, dodaj Exclude
atrybut do _CustomFiles
.
Następnie używam tego elementu do wypełnienia elementu FilesForPackagingFromProject. Jest to element, którego program MSDeploy faktycznie używa do dodawania dodatkowych plików. Zwróć również uwagę, że zadeklarowałem wartość DestinationRelativePath metadanych. To określi względną ścieżkę, którą zostanie umieszczony w pakiecie. Użyłem tutaj instrukcji Extra Files% (RecursiveDir)% (Filename)% (Extension). Chodzi o to, aby umieścić go w tej samej względnej lokalizacji w pakiecie, co w folderze Extra Files.
Z wyłączeniem plików
Jeśli otworzysz plik projektu aplikacji internetowej utworzonej za pomocą VS 2010, na dole znajdziesz wiersz z.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW, możesz otworzyć plik projektu wewnątrz VS. Kliknij prawym przyciskiem myszy projekt, wybierz Zwolnij projekt. Następnie kliknij prawym przyciskiem myszy rozładowany projekt i wybierz Edytuj projekt.
To oświadczenie będzie zawierało wszystkie cele i zadania, których potrzebujemy. Większość naszych dostosowań powinna nastąpić po tym imporcie, jeśli nie jesteś pewien, czy po tym! Więc jeśli masz pliki do wykluczenia, istnieje nazwa elementu ExcludeFromPackageFiles, której można użyć do tego. Na przykład, powiedzmy, że masz plik o nazwie Sample.Debug.xml, który jest zawarty w twojej aplikacji internetowej, ale chcesz, aby ten plik został wykluczony z tworzonych pakietów. Możesz umieścić poniższy fragment po tej instrukcji importu.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Deklarując wypełnienie tego elementu, pliki zostaną automatycznie wykluczone. Zwróć uwagę na użycie FromTarget
metadanych tutaj. Nie będę się tym tutaj zajmował, ale zawsze powinieneś to wiedzieć.