Harika soru. Web Dağıtımı Aracı'nda (MSDeploy) bununla ilgili çok ayrıntılı bir blog yazısı yayınladım : Ekstra dosyalar içeren veya belirli dosyaları hariç tutan Paket Oluştur .
İşte özet. Dosyaları ekledikten sonra, dosyaları nasıl dışlayacağımı da gösteriyorum.
Ekstra Dosyalar Dahil
Pakete fazladan dosya eklemek biraz daha zordur, ancak MSBuild konusunda rahatsanız ve eğer değilseniz bunu okuyun. Bunu yapmak için, işlemin paketleme için dosyaları toplayan kısmına bağlanmamız gerekir. Uzatmamız gereken hedefin adı CopyAllFilesToSingleFolder. Bu hedef, kendi hedefimize dokunup enjekte edebileceğimiz PipelinePreDeployCopyAllFilesToOneFolderDependsOn adlı bir bağımlılık özelliğine sahiptir. Bu yüzden CustomCollectFiles adında bir hedef oluşturacağız ve bunu sürece dahil edeceğiz. Bunu şu şekilde başarıyoruz (import ifadesinden sonra hatırlayın).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Bu, hedefimizi sürece katacak, şimdi hedefin kendisini tanımlamamız gerekiyor. Web projenizin 1 seviye üzerinde bulunan Ekstra Dosyalar adlı bir klasörünüz olduğunu varsayalım. Tüm bu dosyaları dahil etmek istiyorsunuz. İşte CustomCollectFiles hedefi ve bundan sonra tartışıyoruz.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Burada yaptığım şey _CustomFiles öğesini oluşturmaktı ve Include özniteliğinde ona bu klasördeki tüm dosyaları ve altındaki herhangi bir klasörü almasını söyledim. Bir ihtimal yapmanız gerekiyorsa dışlamak bu listeden bir şey, bir ekleme Exclude
için öznitelik _CustomFiles
.
Sonra FilesForPackagingFromProject öğesini doldurmak için bu öğeyi kullanıyorum. Bu, MSDeploy'un fazladan dosya eklemek için kullandığı öğedir. Ayrıca meta veri DestinationRelativePath değerini beyan ettiğime dikkat edin. Bu, pakete yerleştirileceği göreceli yolu belirleyecektir. Burada Ekstra Dosyalar% (RecursiveDir)% (Dosya Adı)% (Uzantı) ifadesini kullandım. Bu, onu Ekstra Dosyalar klasörünün altında olduğu gibi pakette aynı göreceli konuma yerleştirmektir.
Dosyaları hariç tutma
VS 2010 ile oluşturulmuş bir web uygulamasının proje dosyasını aşağıya doğru açarsanız, ile bir satır bulacaksınız.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW proje dosyasını VS'nin içinde açabilirsiniz. Projeye sağ tıklayın Projeyi Kaldır'ı seçin. Ardından kaldırılan projeye sağ tıklayın ve Projeyi Düzenle'yi seçin.
Bu ifade, ihtiyacımız olan tüm hedefleri ve görevleri içerecektir. Özelleştirmelerimizin çoğu, daha sonra konulacağından emin değilseniz, bu içe aktarmadan sonra yapılmalıdır! Bu nedenle, dışarıda bırakılacak dosyalarınız varsa, bunu yapmak için kullanılabilecek ExcludeFromPackageFiles adlı bir öğe adı vardır. Örneğin, web uygulamanızda bulunan Sample.Debug.xml adlı dosyanız olduğunu ancak bu dosyanın oluşturulan paketlerin dışında kalmasını istediğinizi varsayalım. Snippet'i, bu import ifadesinden sonra aşağıya yerleştirebilirsiniz.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Bu öğe doldurulduğunda, dosyalar otomatik olarak dışlanacaktır. FromTarget
Buradaki meta verilerin kullanımına dikkat edin . Burada buna girmeyeceğim, ancak bunu her zaman belirtmeniz gerektiğini bilmelisiniz.