VS2010 web dağıtım paketlerini kullanarak ek dosyaları nasıl eklersiniz? Bölümünde benzer ancak farklı bir soruyu yanıtladım. .
Senaryonuzda post build olayını kullanıyorsunuz, post build olayını bırakmanızı ve eylemlerinizi post build olayı yerine kendi MSBuild hedeflerinizi kullanarak uygulamanızı öneririm. Aşağıda diğer cevabın metnini bulacaksınız.
Kimden: VS2010 web dağıtım paketlerini kullanarak ek dosyaları nasıl eklersiniz?
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 enjekte edeceğiz. Bunu şu şekilde başarıyoruz (import ifadesinden sonra hatırlayın).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
Bu, hedefimizi sürece katacak, şimdi hedefin kendisini tanımlamamız gerekiyor. Web projenizin 1 seviye üzerinde bulunan Ekstra Dosyalar adında 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 o klasördeki tüm dosyaları ve altındaki herhangi bir klasörü almasını söyledim. 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 ilan ettiğime dikkat edin. Bu, pakete yerleştirileceği göreceli yolu belirleyecektir. Burada Extra Files% (RecursiveDir)% (Filename)% (Extension) 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 yüklenmemiş 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 olmalıdır! Dolayısıyla, dışarıda bırakılacak dosyalarınız varsa, bunu yapmak için kullanılabilecek ExcludeFromPackageFiles bir öğe adı vardır. Örneğin, web uygulamanızda bulunan Sample.Debug.js adlı dosyanız olduğunu varsayalım, ancak bu dosyanın oluşturulan paketlerin dışında kalmasını istiyorsunuz. 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 meta verilerinin kullanımına buradan dikkat edin. Burada buna girmeyeceğim, ancak bunu her zaman belirtmeniz gerektiğini bilmelisiniz.