2011-07-07 15 views
5

Bir ASP.NET MVC uygulamasını birkaç farklı sunucuya dağıtmak için msbuild kullanıyoruz. Ancak, msbuild ilk önce uzak uygulama klasörünü silmiş gibi görünmüyor (sadece dosyaları güncelleştiriyor gibi görünüyor). Bizim msbuild komut satırımız şöyle:Temiz uygulamayı uzaktan dağıtmak için msbuild'i edinin

"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" OurWebProject.csproj/P: BaseIntermediateOutputPath = c: \ temp \ tempfolder \/P : Configuration = Release/P: DeployOnBuild = True/P: DeployTarget = MSDeployPublish /P:MsDeployServiceUrl=https://192.168.0.83:8172/MsDeploy.axd/P: AllowUntrustedCertificate = Doğru/P: MSDeployPublishMethod = WMSvc/P: CreatePackageOnPublish = Doğru/P: KullanıcıAdı = ARemoteWebDeployUser/P: Şifre = birşifre

mi MsBuild yeterince temiz bir dağıtım her zaman ihtiyacını ortadan kaldırarak, dosyaları senkronize etmek gerçekten 'akıllı'? Değilse, önce dosyaları silmenin kolay bir yolu var mı?

Web.config dönüşümlerini kullanıyoruz, bu yüzden web.config her seferinde yeniden oluşturuluyor/yeniden dağıtılıyor (iyi bir şey, çünkü uygulama havuzunun her dağıtımda yeniden başlatılmasını istiyoruz).

cevap

2

msbuild komutuna bazı özel seçenekler olup olmadığından emin değilim, ancak projenize bir hedef ekleyebilir misiniz? ,

<Target Name=CleanServerFolders> 
    <Exec Command="psexec \\$(serverIP) -u $(serverUserName) -p $(serverUserPassword) del $(projectFolderOnServer)" 
</Target> 

Eğer PsExec'i bilmiyorsanız buraya bakın: Sen oluşturabilir http://technet.microsoft.com/en-us/sysinternals/bb897553. Microsoft'tan gelen, muhtemelen sunucudaki komutları çalıştırmak için en iyi seçenek olan hafif bir araçtır. Ve sonra bu hedefi aramak için Msbuild komutunu değiştirmek (ama o zaman bu komutla tüm diğer varsayılan hedeflerini belirtmek gerekir):

msbuild.exe /t:Build,CleanServerFolders,Deploy ...etc 

Sonunda bir post proje dosyası (ler) olayları inşa ekleyebilir.

<Project> 
    ... 
    <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" /> 
    <Target Name="AfterBuild"><CallTarget Targets="CleanServerFolders"/></Target> 
</Project> 

Elbette Microsoft.VisualBasic.targets, .vbproj projeleri için bir dosyadır. C# kullanıyorsanız, Microsoft.CSharp.targets dosyasını deneyin (MSDN'de daha iyi adın kontrol edin)

0

Robocopy komutunu kullanmayı denediniz mi? msbuild uzantı paketinin bunun için bir msbuild sarıcısı var mı? Bkz. http://msbuildextensionpack.codeplex.com/

Sadece farklı dosyaları ve diğer tüm kopya seçeneklerini güncelleştirmek için robocopy ayarlayabilirsiniz. robocopy/'a bir göz atın. ve dağıtımları hızlandırmak için mevcut tüm seçenekleri görün.

İlgili konular