Ottima domanda Ho appena pubblicato un post di blog molto dettagliato al riguardo su Web Deployment Tool (MSDeploy): Build Package con file extra o esclusione di file specifici .
Ecco la sinossi. Dopo aver incluso i file, mostro anche come escludere i file.
Compresi file extra
Includere file extra nel pacchetto è un po 'più difficile ma non è ancora un problema se sei a tuo agio con MSBuild e se non lo sei, leggi questo. Per fare ciò dobbiamo agganciarci alla parte del processo che raccoglie i file per il packaging. L'obiettivo che dobbiamo estendere si chiama CopyAllFilesToSingleFolder. Questo target ha una proprietà di dipendenza, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, che possiamo attingere e iniettare il nostro target. Quindi creeremo un target chiamato CustomCollectFiles e lo inietteremo nel processo. Otteniamo questo risultato nel modo seguente (ricordare dopo la dichiarazione di importazione).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Ciò aggiungerà il nostro obiettivo al processo, ora dobbiamo definire l'obiettivo stesso. Supponiamo che tu abbia una cartella chiamata Extra Files che si trova 1 livello sopra il tuo progetto web. Vuoi includere tutti quei file. Ecco il target CustomCollectFiles e ne discuteremo dopo.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Qui quello che ho fatto è stato creare l'elemento _CustomFiles e nell'attributo Include gli ha detto di raccogliere tutti i file in quella cartella e qualsiasi cartella sottostante. Se per caso è necessario escludere qualcosa dall'elenco, aggiungere un Exclude
attributo a _CustomFiles
.
Quindi uso questo articolo per popolare l'elemento FilesForPackagingFromProject. Questo è l'elemento che MSDeploy utilizza effettivamente per aggiungere file extra. Si noti inoltre che ho dichiarato il valore DestinationRelativePath dei metadati. Ciò determinerà il percorso relativo che verrà inserito nel pacchetto. Ho usato l'istruzione File extra% (RecursiveDir)% (Nome file)% (Estensione) qui. Ciò che sta dicendo è posizionarlo nella stessa posizione relativa nel pacchetto in cui si trova nella cartella File extra.
Escludendo i file
Se apri il file di progetto di un'applicazione web creata con VS 2010 verso il fondo, troverai una riga con.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
A proposito, puoi aprire il file di progetto all'interno di VS. Fare clic con il tasto destro del mouse sul progetto, selezionare Scarica progetto. Quindi fare clic con il tasto destro del mouse sul progetto scaricato e selezionare Modifica progetto.
Questa dichiarazione includerà tutti gli obiettivi e le attività di cui abbiamo bisogno. La maggior parte delle nostre personalizzazioni dovrebbe avvenire dopo tale importazione, se non si è sicuri di averlo fatto dopo! Quindi, se hai dei file da escludere, c'è un nome articolo, ExcludeFromPackageFiles, che può essere usato per farlo. Ad esempio, supponiamo che tu abbia un file chiamato Sample.Debug.xml che includeva nella tua applicazione web ma che vuoi che quel file venga escluso dai pacchetti creati. Puoi posizionare lo snippet di seguito dopo tale istruzione di importazione.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Dichiarando il popolamento di questo elemento, i file verranno automaticamente esclusi. Nota qui l'uso dei FromTarget
metadati. Non entrerò in questo qui, ma dovresti sapere di specificarlo sempre.