2009-02-25 19 views
6

मैं NAnt के लिए नया हूँ और बनाने के लिए सक्षम किया गया है एक <target> जोNAnt <msbuild> कस्टम उत्पादन निर्देशिका

1) वर्तमान फ़ोल्डर

2) से किसी भी कोड को हटाता है एक्सपोर्ट्स SVN

से ताजा कोड

3) डिफ़ॉल्ट निर्देशिका में कोड जो PrecompiledWeb फ़ोल्डर है (इसकी एक वेब एप्लिकेशन) बनाता है

यहाँ

यह है:

<target name="export" description="export code from svn"> 
    <delete dir="${Delete.Dir}"></delete> 
    <exec program="svn" commandline="export ${MySVN.Repos} ${MySVN.Dest}" /> 
    <msbuild project="${Solution.Filename}"> 
     <property name="Configuration" value="Release"/> 
    </msbuild> 
</target> 

मैं एक कस्टम आउटपुट निर्देशिका निर्दिष्ट करना चाहता हूं ("PrecompiledWeb" के अलावा)। क्या यह संभव है और क्या आप मुझे आवश्यक टैग/संपत्ति दिखा सकते हैं?

धन्यवाद!

संपादित

स्कॉट और सी के लिए धन्यवाद, मैं एक समाधान के करीब हो रही है, लेकिन मैं अभी भी कुछ भी है कि काम करता है नहीं है। वहां टिप्पणियों ने मुझे इस लेख को MSBuild's Output Path Property पर ले जाया। अपने कोड का उपयोग:

<?xml version="1.0"?> 
<project name="test" default="build" basedir="." xmlns="http://nant.sf.net/schemas/nant-0.84.win32.net-1.0.xsd"> 
    <target name="build"> 
     <exec program="${framework::get-framework-directory('net-3.5')}/msbuild.exe"> 
      <arg value="${Full.Path}\Code\MySolution.sln" /> 
      <arg value="/p:OutputPath=${Full.Path}\Output\" /> 
     </exec> 
    </target> 
</project> 

यह सफलतापूर्वक चलाएगा; हालांकि, मेरे समाधान में जिसमें एक वेब साइट और क्लास लाइब्रेरी है, यह क्लास लाइब्रेरी डीएल को निर्दिष्ट आउटपुट पथ पर प्रकाशित करता है, लेकिन यह अभी भी डिफ़ॉल्ट वेब साइट को डिफ़ॉल्ट प्रीकंपील्डवेब फ़ोल्डर में प्रकाशित करता है।

क्या किसी के पास NANT से PrecompiledWeb फ़ोल्डर पथ को बदलने के लिए कोई सुझाव है?

मदद की हर किसी के लिए धन्यवाद!

<exec program="${framework::get-framework-directory('net-4.0')}/msbuild.exe"> 
    <arg value="${Full.Path}\Code\MySolution.sln" /> 
    <arg value="/t:Rebuild" /> 
    <arg value="/t:ResolveReferences" /> 
    <arg value="/t:_CopyWebApplication" /> 
    <arg value="/p:OutDir=${Build.Output}bin\" /> 
    <arg value="/p:WebProjectOutputDir=${Build.Output}" /> 
    <arg value="/p:Configuration=Release" /> 
</exec> 
+0

आप एक वेब तैनाती परियोजना का उपयोग करते हैं आप के लिए OutputPath परिभाषित कर सकते हैं पूरी वेबसाइट इसके अलावा, शायद आपको माइक्रोसॉफ्ट एमएसबिल्ड स्क्रिप्ट में प्रवेश करने की आवश्यकता होगी? – si618

उत्तर

8

एक निर्दिष्ट और MSBuild के लिए संपत्तियों की कुछ ओवरराइड कर सकते हैं:

2 संपादित अंतिम समाधान

यहाँ मैं अंत में काम कर पाने में सक्षम था (.net 4 के लिए अद्यतन) है। आउटपुट निर्देशिका निर्दिष्ट करने के लिए, आउटपुटडियर संपत्ति ओवरराइड करें।

<target name="export" description="export code from svn"> 
     <delete dir="${Delete.Dir}" /> 
     <exec program="svn" commandline="export ${MySVN.Repos} ${MySVN.Dest}" /> 
     <msbuild project="${Solution.Filename}"> 
      <property name="Configuration" value="Release"/> 
      <property name="OutputDir" value="${Output.Dir}"/> 
     </msbuild> 
</target> 
+0

शायद मैं कुछ गलत कर रहा हूं, लेकिन उस संपत्ति टैग को जोड़ने के बाद भी, यह अभी भी समाधान फ़ोल्डर के अंदर प्रीकंपिल्टेड वेब फ़ोल्डर में प्रकाशित होता है। क्या आपको कोई विचार है कि यह क्यों हो सकता है? आपकी मदद के लिए धन्यवाद। –

+0

क्या यह एक वेब समाधान है? –

+0

आह ... बस आपके जवाब में देखा कि यह वास्तव में एक वेब ऐप है। –

7

बस एक परियोजना इसकी एक झलक लेने के लिए किया था, OutputPath OutputDir के बजाय मदद करता है?

एक अन्य विकल्प के लिए एक वेब तैनाती परियोजना है, जो मुझे पसंद है क्योंकि यह aspnet_compiler के साथ ही सी # संकलक कहता है, तो यह मुद्दे हैं जो आप अन्यथा तैनाती जब तक वंचित हो सकते हैं ऊपर उठाता है हो सकता है।

4

हमारी परियोजनाओं में से एक के लिए एक निर्माण स्क्रिप्ट एक वेब अनुप्रयोग प्रकाशित करने के लिए इस आदेश का उपयोग करता है:

msbuild.exe /t:_CopyWebApplication /p:Configuration=Release /p:OutDir=.\..\published\ /p:WebProjectOutputDir=.\..\published 

(वर्तमान निर्देशिका इस बिंदु पर वेब एप्लिकेशन की परियोजना निर्देशिका, यही वजह है कि कोई .csproj है पर सेट है फ़ाइल निर्दिष्ट है। पूरे समाधान को पहले ही स्क्रिप्ट में पुनर्निर्मित कर दिया गया है।)

इसकी आवाज से, WebProjectOutputDir आपकी संपत्ति की आवश्यकता हो सकती है।

/टी: _CopyWebApplication भी महत्वपूर्ण हो सकता है। मैंने NAnt का उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि आप इस पैरामीटर को msbuild कार्य के साथ पास कर सकते हैं या नहीं। आपको एक निष्पादन कार्य का उपयोग करने की आवश्यकता हो सकती है, जैसे कि इस उदाहरण में: http://www.netomatix.com/development/wapwithnant.aspx। यह उदाहरण पुनर्निर्माण और सभी को एक ही बार में कॉपी करने के लिए प्रतीत होता है।

1

भ्रम का एक स्रोत यह है कि आप दो अलग-अलग बिल्ड सिस्टम को मिश्रित कर रहे हैं। आपका एनएएनटी लक्ष्य आपके वेब एप्लिकेशन को समाधान फ़ाइल में प्रकाशित करने का तरीका जानने के सभी कार्यों का प्रतिनिधित्व कर रहा है, इसलिए सीएसपीआरजे फाइलों के विस्तार से इसका संदर्भ है।

csproj फ़ाइलें एमएसबिल्ड फाइलें हैं, इसलिए आपको शायद अपने प्रोजेक्ट आउटपुट को निर्देशित करने के तरीके के बारे में देखना चाहिए। This post by dave^2 उस मुद्दे पर सहायक हो सकता है।

जहां भी आप NANT का उपयोग करना चाहते हैं, तो आप अपना वेब एप्लिकेशन प्रकाशित कर सकते हैं, बशर्ते यह प्रकाशन कर रहा हो। आप एमएसबिल्ड के साथ भी ऐसा ही कर सकते हैं। आपके विवाद का कारण यह है कि NAnt इस मामले में प्रकाशन कर रहा है, और आप csproj फ़ाइल को अपनी वेब निर्देशिका का स्थान निर्धारित करने दे रहे हैं। तो या तो csproj फ़ाइल को बाईपास करें और NANT (या MsBuild) कोड प्रकाशित करें; या जहां आप चाहते हैं वेब एप्लिकेशन प्रकाशित करने के लिए csproj फ़ाइल को संशोधित करें; या अपने वेब एप्लिकेशन के लिए दूसरा स्थान बनाएं और इसे अपने निर्माण टूल का उपयोग करके वहां प्रकाशित करें।

AFAIK, वे विकल्प संपूर्ण हैं।

0

हम्म, कैसे Nant में MSBuild के साथ यह करने के लिए पता नहीं है, लेकिन NAnt का उपयोग कर, मैं यह पहले से इस तरह किया है:

<solution solutionfile="${build.dir}\solution.sln"> 
    <webmap> 
     <map url="http://localhost/somdir/project.csproj" 
      path="c:\inetpub\wwwroot\somelocaldir" /> 
    <webmap> 
</solution> 

लेकिन फिर भी, आप NAnt 'समाधान का उपयोग कर रहे 'एमएसबिल्ड का उपयोग करने के बजाय सीधे कार्य करें।

संपादित करें: मैं कुछ msbuild विकल्पों पर भी एक नज़र डाल रहा हूं; यदि आप आउटडिर & आउटपुटपाथ को उसी मान पर सेट करते हैं, तो क्या होता है?

+0

धन्यवाद, लेकिन यह एक .NET 3.5 प्रोजेक्ट है और मुझे नहीं लगता कि टैग समर्थन .NET 3.5 है। –

3

कार्य का उपयोग कर, सही संपत्ति नाम OutDir, नहीं OutputDir है:

<msbuild project="${Solution.Filename}"> 
     <property name="Configuration" value="Release"/> 
     <property name="OutDir" value="${Output.Dir}"/> 
    </msbuild> 
0

कुछ इस तरह का प्रयास करें:

<property name="nant.settings.currentframework" value="net-3.5"/>  
<msbuild project="${Solution.Filename}"> 
    <property name="Configuration" value="Release"/> 
    <property name="OutDir" value="${Full.Path}\Output\\"/> 
    <property name="WebProjectOutputDir" value="${Full.Path}\Output\Web\\"/> 
</msbuild>