2011-07-07 11 views
5

हम कुछ अलग-अलग सर्वरों पर एएसपी.नेट एमवीसी अनुप्रयोग को तैनात करने के लिए एमएसबिल्ड का उपयोग कर रहे हैं। हालांकि, msbuild पहले रिमोट एप्लिकेशन फ़ोल्डर को हटाने के लिए प्रतीत नहीं होता है (यह केवल फाइलों को अपडेट करने लगता है)। हमारे MSBuild कमांड लाइन इस तरह दिखता है:स्वच्छ ऐप को दूरस्थ रूप से तैनात करने के लिए एमएसबिल्ड प्राप्त करें

"C: \ Windows \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319 \ MSBuild.exe" OurWebProject.csproj/पी: BaseIntermediateOutputPath = c: \ अस्थायी \ tempfolder \/पी : कॉन्फ़िगरेशन = रिलीज/पी: DeployOnBuild = True/P: DeployTarget = MSDeployPublish /P:MsDeployServiceUrl=https://192.168.0.83:8172/MsDeploy.axd/P: AllowUntrustedCertificate = True/P: MSDeployPublishMethod = WMSvc/P: CreatePackageOnPublish = True/P: UserName = ARemoteWebDeployUser/P: पासवर्ड = कुछ पासवर्ड

क्या एमएसबिल्ड वास्तव में फ़ाइलों को सिंक करने के लिए पर्याप्त 'स्मार्ट' है, हर बार एक स्वच्छ तैनाती की आवश्यकता को खत्म कर देता है? यदि नहीं, तो फ़ाइलों को पहले हटाए जाने का कोई आसान तरीका है?

हम web.config ट्रांसफॉर्म का उपयोग कर रहे हैं, इसलिए web.config को हर बार पुनर्निर्मित/पुनर्निर्मित किया जाता है (एक अच्छी बात है, क्योंकि हम चाहते हैं कि ऐप पूल प्रत्येक तैनाती पर पुनरारंभ करें)।

उत्तर

2

मुझे यकीन नहीं है कि msbuild कमांड के लिए कुछ विशिष्ट विकल्प हैं, लेकिन हो सकता है कि आप अपनी परियोजना में एक लक्ष्य जोड़ सकें? आप बना सकते हैं:

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

आप PsExec पता नहीं है, यहाँ देखो: http://technet.microsoft.com/en-us/sysinternals/bb897553। यह माइक्रोसॉफ्ट से हल्का उपकरण है, शायद सर्वर पर कमांड चलाने के लिए सबसे अच्छा विकल्प है। और फिर अपने MSBuild आदेश को संशोधित इस लक्ष्य को कॉल करने के लिए (लेकिन फिर आप इस आदेश में अन्य सभी डिफ़ॉल्ट लक्ष्यों को निर्दिष्ट करने की जरूरत है):

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

अंततः आप एक पोस्ट अपनी परियोजना फ़ाइल (फ़ाइलें) के लिए घटनाओं का निर्माण जोड़ सकते हैं।

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

बेशक माइक्रोसॉफ्ट। VisualBasic.targets .vbproj परियोजनाओं के लिए एक फ़ाइल है। यदि आप C# का उपयोग कर रहे हैं, तो Microsoft.CSharp.targets (MS12N पर बेहतर नाम जांचें)

0

क्या आपने robocopy कमांड का उपयोग करने का प्रयास किया है? एमएसबिल्ड एक्सटेंशन पैक के लिए एक एमएसबिल्ड रैपर है? देखें http://msbuildextensionpack.codeplex.com/

आप केवल विभिन्न फाइलों और अन्य प्रतिलिपि विकल्पों के सभी प्रकारों को अपडेट करने के लिए रोबोकॉपी सेट कर सकते हैं। रोबोकॉपी/पर एक नज़र डालें? और तैनाती को तेज करने के लिए सभी उपलब्ध विकल्पों को देखें।

संबंधित मुद्दे