2014-10-04 9 views
5
में परियोजना

मैं अन्य पदों StackOverflow पर यहाँ जो कि मेरी समस्या मैं का सामना कर रहा हूँ के साथ सौदा मिल गया है से बाहर फ़ाइलों को, उदाहरण के लिए सहित:MSBuild

MSBuild: Deploying files that are not included in the project के साथ-साथ Include Files in MSBuild that are not a part of the project मैं कोड है कि मैं था साझा करना चाहते थे इन पदों को पढ़ने के बाद बनाने में सक्षम हैं और कुछ मदद मांगते हैं कि यह क्यों काम नहीं कर रहा है?

यह बताएं कि वास्तव में क्या गलत नहीं है और मैं क्या करना चाहता हूं। मैं विजुअल स्टूडियो 2012 और टीएफएस 2012 का उपयोग कर रहा हूं।

मेरे पास CreateMyFiles.bat नामक एक बैच फ़ाइल है, और मैं जो करना चाहता हूं वह इसे निष्पादित करता है और फिर फ़ाइलों को आउटपुट करता है (यह उन्हें मेरे शामिल/जावास्क्रिप्ट/बंडल फ़ोल्डर) और उन्हें MSBuild में निर्माण के हिस्से में शामिल करें (ताकि वे लक्ष्य IIS सर्वर पर तैनात किए गए हों)।

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

फिर मैंने अपने कोड में टीएफएस में चेक किया, और टीएफएस पर 'बिल्ड' पर गया, और एक नया निर्माण कतारबद्ध किया। निश्चित रूप से, मैं बिल्ड सर्वर पर एक ही निर्देशिका में फ़ाइलों के आउटपुट को देखने में सक्षम था। अब, मैं MSBuild के बारे में 100% निश्चित नहीं हूं लेकिन मैंने देखा कि जब मैंने स्थानीय रूप से प्रकाशित किया था, तो उसने बिल्ड सर्वर पर एक _publishedWebsite फ़ोल्डर भी बनाया (साथ ही स्रोत के ऊपर एक निर्देशिका)। बात यह है कि, इस प्रकाशित वेबसाईट फ़ोल्डर में, मेरी मैन्युअल रूप से बनाई गई फाइलें मौजूद नहीं थीं। इसके अलावा, निर्माण के बाद लक्षित वेब सर्वर पर जाकर दुर्भाग्यवश मेरे पास फाइलें नहीं थीं।

तो ऐसा लगता है कि अगर मैं मैन्युअल रूप से प्रकाशित करना चुनता हूं, तो नीचे दिया गया कोड काम करता है, लेकिन अगर मैं टीएफएस के साथ निर्माण करना चाहता हूं, तो यह काम नहीं करता है। क्या MSBuild प्रकाशित का उपयोग करता है? क्या यह कारण हो सकता है कि यह नीचे काम नहीं करता है?

<Target Name="CustomCollectFiles"> 
    <Exec Command="CreateMyFiles.bat" /> <!-- Generate Files --> 
    <ItemGroup> 
     <!-- Create an identity called _CustomFiles, and associate it to the files I created --> 
     <_CustomFiles Include="Includes\JavaScript\Bundled\*" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>Includes\JavaScript\Bundled\*%(Filename)%(Extension)  </DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 

<!-- Hook into the pipeline responsible for gathering files and tell it to add my files --> 
    <PropertyGroup> 
    <CopyAllFilesToSingleFolderForPackageDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForPackageDependsOn> 

    <CopyAllFilesToSingleFolderForMsdeployDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForMsdeployDependsOn> 
    </PropertyGroup> 

मैं वास्तव में इस पर अटक कर रहा हूँ और क्यों फ़ाइलों के लिए जा रहा नहीं किया जा सकता करने के लिए के रूप में कुछ मदद के लिए पूछना चाहता था:

यहाँ कोड मैं अपने .csproj फ़ाइल में रखा गया है। मुझे संदेह है कि एमएसबिल्ड प्रकाशन का उपयोग नहीं करता है और यही कारण है कि यह स्थानीय रूप से काम करता है (क्योंकि मैं प्रकाशित का चयन कर रहा हूं)? आपकी मदद के

अद्यतन के लिए बहुत बहुत

धन्यवाद नीचे टिप्पणी के अनुसार इस की कोशिश की, लेकिन इस बार फ़ाइलें भी प्रकट नहीं किया था (इसलिए यह अब भी कार्य नहीं चला लग रहा था)। कोई विचार क्यों? क्या मैंने यह सही टाइप किया?

<Target Name="CustomCollectFiles"> 
    <Exec Command="CreateMyFiles.bat" /> 

    <!-- Generate Files --> 
    <ItemGroup> 
    <!-- Create an identity called _CustomFiles, and associate it to the files I created --> 
     <_CustomFiles Include="Includes\JavaScript\Bundled\*" /> 
    <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>Includes\JavaScript\Bundled\*%(Filename)%(Extension)   </DestinationRelativePath> 
    </FilesForPackagingFromProject> 
    </ItemGroup> 
</Target> 

<!-- Hook into the pipeline responsible for gathering files and tell it to add my files --> 
<PropertyGroup> 
    <PipelineCollectFilesPhaseDependsOn> 
    CustomCollectFiles; 
    $(PipelineCollectFilesPhaseDependsOn); 
    </PipelineCollectFilesPhaseDependsOn> 
</PropertyGroup> 

अद्यतन 2 जब मैं ऊपर कोड लेते हैं, और मेरी pubxml फाइल में यह जगह और फिर निष्पादित एक वास्तविक प्रकाशित करते हैं, यह काम करता है, लेकिन जैसा कि तक मुझे पता है हमारे प्रक्रिया सिर्फ एक का निर्माण क़तार में है टीएफएस से क्या बिल्डिंग कतार में उपरोक्त कोड ब्लॉक में हुक करना संभव है? या मुझे प्रकाशित करने की ज़रूरत है?

उत्तर

2

करने के लिए एक TFS से प्रकाशित आपको स्पष्ट रूप से अपनी खुद की PublishProfile नाम का उपयोग निम्नलिखित तर्क

/p:DeployOnBuild=true;PublishProfile=Release 

जोड़ने की जरूरत का निर्माण

+0

तो जब मैं टीएफएस में एक बिल्ड कतार करता हूं, तो यह * प्रकाशित नहीं होता है? क्या कोई तरीका है कि मैं उपरोक्त कोड को प्रकाशित किए बिना चला सकता हूं? – NullHypothesis

+0

कोई प्रकाशित नहीं है जब तक कि आप इसे ऊपर दिखाए गए एमएसबिल्ड Args के साथ नहीं बताते। आप कुछ ऐसा ही कर सकते हैं, लेकिन ऊपर दिए गए कोड को प्रकाशन में लक्षित किया गया है, जो मुझे लगता है कि "FilesForPackagingFromProject" कोड –

+0

कोड में है, इसलिए मुझे लगता है कि क्या हो रहा है यह है कि जब मैं कतार करता हूं, तो मुझे लगता है कि फ़ाइलों को धक्का दिया जाता है एमएस बिल्ड गतिविधि की वजह से प्रकाशन लक्ष्य, सही? क्या प्रकाशन में कोई नुकसान है? – NullHypothesis

2

VS2012 में, लक्ष्य से नाम दिया गया था:

CopyAllFilesToSingleFolderForPackageDependsOn

रहे हैं:

CopyAllFilesToSingleFolderForMsdeployDependsOn

अद्यतन: ऊपर लक्ष्य की तरह VS2012 लक्ष्य के भीतर से नहीं कहा जा रहा है लग रहा है, कर सकते हैं आप इसे "PipelineCollectFilesPhaseDependsOn" लक्ष्य पर कॉल के साथ प्रतिस्थापित करते हैं? इसे ठीक करना चाहिए।

<PropertyGroup> 
    <PipelineCollectFilesPhaseDependsOn> 
     CustomCollectFiles; 
     $(PipelineCollectFilesPhaseDependsOn); 
     </PipelineCollectFilesPhaseDependsOn>  
</PropertyGroup> 
+0

हाँ यह सच है, धन्यवाद, हालांकि अगर आप मुझे देखने के लिए वास्तव में क्या करते वास्तव में इसके नीचे है (इसलिए मेरे पास दोनों हैं)। क्या यह ठीक है या आपको लगता है कि इससे समस्याएं पैदा होंगी? यह संकलन या परियोजना को बचाने के संबंध में कोई त्रुटि नहीं फेंकता है। आपकी मदद के लिए धन्यवाद :) – NullHypothesis

+0

मैंने जवाब अपडेट किया है, इसे जांचें और मुझे बताएं – Isaiah4110

+0

कोई पासा नहीं - मैंने ऊपर अपडेट किया - कोई मौका आप मुझे अपने विचारों को बताने दे सकते हैं? आपके समर्थन के लिए शुक्रिया! – NullHypothesis