2009-12-31 12 views
41

मैं अपने वेब एप्लिकेशन को स्वचालित रूप से प्रकाशित करने का प्रयास कर रहा हूं जब रिलीज बिल्ड किया जाता है। मैं _CopyWebApplication लक्ष्य का उपयोग कर ऐसा कर रहा हूं। मैंने अपनी .csproj फ़ाइल में निम्नलिखित जोड़ा:_CopyWebApplication web.config ट्रांसफॉर्मेशन

<!-- Automatically Publish in Release build. --> 
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 
    <Target Name="AfterBuild"> 
    <RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" /> 
    <MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" /> 
    </Target> 

यह एक समस्या के साथ काम करता है। इस आउटपुट के बीच का अंतर, और विजुअल स्टूडियो में प्रकाशित मेनू आइटम का उपयोग करते समय उत्पन्न आउटपुट यह है कि MSBuild विधि का उपयोग करते समय Web.confeconfig रूपांतरण Web.config फ़ाइल पर लागू नहीं होता है। इसके बजाय, Web.config, Web.Release.config, और Web.Debug.config सभी कॉपी किए गए हैं।

किसी भी विचार की सराहना की जाती है।

उत्तर

71

मैं इसके लिए दीवार के खिलाफ अपना सिर मार रहा हूं। एमएसबिल्ड लक्ष्यों के माध्यम से लंबी पैदल यात्रा के बाद मैं कुछ "अपारदर्शी" में आया हूं।

लंबी कहानी छोटी: नए _WPPCopyWebApplication का उपयोग करने का प्रयास करें। यह मेरी मशीन पर काम करता है। पुराने _CopyWebApplication विरासत कारणों के लिए परिवर्तनों का समर्थन नहीं करता है।

msbuild /t:Rebuild /p:OutDir=..\publish\;Configuration=Release;UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False MvcApplication1\MvcApplication1.csproj 

# UseWPP_CopyWebApplication = true requires PipelineDependsOnBuild = false 

लंबी कहानी:

VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets पर एक नज़र डालें यह मैं क्या कर रहा है। यह बहुत गलत है। लाइन 70 में _CopyWebApplication खोजें टिप्पणी है:

मूल _CopyWebApplication अब एक विरासत है, तो आप अभी भी यह स्थापित करने $ (UseWPP_CopyWebApplication) द्वारा सच करने के लिए उपयोग कर सकते हैं। डिफ़ॉल्ट रूप से, अब यह माइक्रोसॉफ्ट.Web.Publish.targets में _WPPCopyWebApplication लक्ष्य का उपयोग करने के लिए बदल जाता है। यह web.config trsnaformation का लाभ उठाने की अनुमति देता है। [सभी sic]

उह ओह। UseWPP_CopyWebApplication झूठी (लाइन 27) के लिए डिफ़ॉल्ट है जो समझ में आता है अगर आप मौजूदा _CopyWebApplication को तोड़ना नहीं चाहते हैं। तो इसे सच में स्थापित करने से वास्तव में वीएस 2010 में पेश की गई नई WPP सामग्री का उपयोग किया जाएगा। मैं इसे "छुपा" लक्ष्य कहने पर प्राथमिकता देता हूं।

+4

डब्ल्यूटीएफ माइक्रोसॉफ्ट? इस जेबे को साझा करने के लिए धन्यवाद ... – jjxtra

+0

मुझे आश्चर्य है कि एमएसबिल्ड आउटपुट डीआईआर में शामिल होने के लिए अन्य परियोजनाओं के माध्यम से संदर्भित पुस्तकालयों को कॉपी करने का कोई तरीका है? –

+0

मैंने वेब डिप्लॉय उपयोग/पी: WebPublishMethod = FileSystem और pubxml फ़ाइलों का उपयोग करके ऐसा करने का प्रयास किया। मैं इसे काम नहीं कर सका। यह समाधान मुझे मिला सबसे अच्छा तरीका है। सलाह का एक शब्द: मैं इसे आउटडियर प्रॉपर्टी सेट के बिना काम नहीं कर सका। आपको इसे कमांड लाइन में शामिल करने की आवश्यकता होगी भले ही यह आपके प्रोजेक्ट के गुणों में पहले से परिभाषित हो। –