2012-06-11 26 views
10

मैं आदेश के बाद फोन करके MSBuild का उपयोग कर अपने वेब एप्लिकेशन को प्रकाशित करना:पैकेज लक्ष्य के लिए रूट फ़ोल्डर कैसे निर्दिष्ट करें?

msbuild myweb.csproj /T:Package /P:PackageLocation=obj\Output\myweb.zip 

ज़िप फ़ाइल की सामग्री हमेशा गहरी फ़ोल्डर परियोजना फ़ोल्डर में ड्राइव जड़ से पूरा पथ युक्त संरचना है। क्या इसे और अधिक सपाट बनाने का कोई तरीका है? मैं ज़िप में रूट जैसे प्रोजेक्ट फ़ोल्डर रखना चाहता हूं।

उत्तर

10

आप आईआईएस की तरह फ्लैट संरचना के लिए PackageLocation के बजाय _PackageTempDir उपयोग कर सकते हैं, लेकिन आप ज़िप रखने के लिए और प्रकट होता है के साथ .cmd करना चाहते हैं तो नहीं, तुम नहीं वास्तव में पूर्ण पथ से दूर Microsoft.Web पुनर्लेखन के बिना प्राप्त कर सकते हैं Var का उपयोग करने के तरीके के कारण .ublishing.targets या कस्टम कार्य।

<_PackageTempDir>$(PackageTempRootDir)\PackageTmp</_PackageTempDir> 
<_PackageTempDirFullPath>$([System.IO.Path]::GetFullPath($(_PackageTempDir))</_PackageTempDirFullPath> 
<_MSDeployDirPath Include="$(_PackageTempDir)" /> 
<_MSDeployDirPath_FullPath>@(_MSDeployDirPath->'%(FullPath)')</_MSDeployDirPath_FullPath> 

आप तथापि MSBuild चाल और एक स्थानीय हिस्सेदारी के साथ निरपेक्ष पथ छुपा, कुछ इस तरह से एक छोटा सा यह समतल कर सकते हैं:

net share foo=D:\Temp 
msbuild WebApplication1.csproj /t:Package /p:PackageTempRootDir=\\localhost\foo 

ऐसा ही कुछ करने के लिए अपने गहरे स्थानीय पथ बदल देंगे obj\Debug\Package\WebApplication1.zip\Content\_S_Slocalhost_Sfoo\PackageTmp

+0

पैकेज_PempRootDir को _PackageTempDir पर क्यों सेट करें? –

+0

@ScottStafford कोई कारण नहीं, बस एक और विकल्प। मैं बाद में अनावश्यक डबल पैकेजिंग और कभी-कभी सिम्लिंक को रोकने के लिए सीधे 'पाइपलाइन प्रीडियोकॉपी कॉपीऑफफाइल टॉऑनफोल्डर' का उपयोग करने के लिए आगे बढ़ गया। –

+0

उस समाधान को देखने के लिए उत्सुक ... यह एक तरीका हमारे लिए बहुत अच्छा काम करता है .. –

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