2015-01-26 5 views
5

मैंने (कस्टम) निर्माण परिभाषाओं में उपयोग के लिए CodeActivity बनाया है। इस गतिविधि को अपने प्राथमिक उद्देश्य को निष्पादित करने से पहले 'स्रोत निर्देशिका', 'कस्टम फ़ोल्डरों' को 'ड्रॉप निर्देशिका' (आदि) में सर्वर पर स्थित फ़ाइलों से कॉपी करने की आवश्यकता है।मैं सर्वर पर TFS फ़ोल्डरों के रूट और सापेक्ष पथ को कैसे हल करूं?

मेरे कुछ चर मेरे पास वैध पथ हैं, लेकिन अन्य स्पष्ट रूप से 'सापेक्ष पथ' के लिए प्लेसहोल्डर्स हैं। हालांकि, मुझे भौतिक सर्वर पथ की आवश्यकता है ताकि मैं उपयोगी वस्तुओं को प्रतिलिपि बना सकूं।

  • परियोजनाओं जड़ के लिए भौतिक पथ (नीचे छवि देखें)
  • कस्टम फ़ोल्डर के लिए भौतिक पथ (नीचे छवि देखें) को हल करने में सक्षम होने के
  • :

    मैं जैसी चीजों की जरूरत है

  • यह संबंधित पथ '

बेशक, मैं परियोजना गुजारें सकता से शारीरिक रास्तों को हल करने में सक्षम होना अच्छा होगा गतिविधि में नाम (उद्देश्यों को पार्स करने के लिए) ... क्योंकि यह सिर्फ 'चीज' होगा।

मेरे सवाल (एस) हैं:

  • मैं TFS परियोजना जड़ करने के लिए भौतिक पथ कैसे ठीक करूं?
  • एक बार जब मैं रूट को हल करता हूं, तो क्या मैं इसे कस्टम फ़ोल्डरों के लिए 'बिल्ड' पथ पर भरोसा कर सकता हूं?
  • मैं '$/test/Drops' जैसे सापेक्ष पथ से सर्वर पथ कैसे प्राप्त करूं?

चीजों के कुछ उदाहरण मुझे पता है कैसे प्राप्त करें:
इन मदों को कुछ हद तक उपयोगी होते हैं, जबकि अन्य ... इतना नहीं। जब तक, मैं भौतिक सर्वर पथ प्राप्त करने के लिए उनका उपयोग नहीं कर सकता।

BuildDirectory:
'एफ: \ bld \ बनाता है \ 41 \ टेस्ट \ Test_CustomActivity_CreateNuGetPackages'

BuildDetail.DropLocationRoot: मैं था
'$/टेस्ट/गिरावट'
... इच्छा भौतिक पथ

BuildDetail.BuildController.CustomAssemblyPath:
'$/टेस्ट/BuildProcessTemplates'
... इच्छा मैं शारीरिक रास्ता था

SourcesDirectory:
'एफ: \ bld \ बनाता है \ 41 \ टेस्ट \ Test_CustomActivity_CreateNuGetPackages \ src'

Workspace.Folders:
'एफ: \ bld \ बनाता है \ 41 \ टेस्ट \ Test_CustomActivity_CreateNuGetPackages \ src \ टेस्ट \ NuGet।रिसर्च \ net35 '

चीजों के कुछ उदाहरण मैं चाहते हैं:
enter image description here

अद्यतन: 2/2/2015
@Edward - आपके अनुरोध के अनुसार। नीचे जो मैं पूरा करने की कोशिश कर रहा हूं उसके बारे में एक और विस्तृत स्पष्टीकरण नीचे दिया गया है।

enter image description here enter image description here

+0

क्या आप अपने स्रोत कोड से संबंधित सर्वर पर भौतिक फ़ोल्डर पथ होने की उम्मीद कर रहे हैं? – allen

+0

@allen हाँ ... क्यों नहीं होगी? मुझे लगता है कि वहाँ होना होगा? –

उत्तर

14

मुझे कह रही है वहाँ शब्दावली अधिभार का एक बहुत चल रहा है कि द्वारा इस उत्तर प्रस्तावना करते हैं, तो मैं कुछ चीजें निर्धारित करना चाहते हैं:

  • सर्वर पथ: पथ संस्करण नियंत्रण प्रणाली में फ़ाइल या फ़ोल्डर में। उदाहरण के लिए, $/Test/BuildResources एक सर्वर पथ है। यह एक पूर्ण सर्वर पथ है, यह सापेक्ष नहीं है।
  • स्थानीय पथ: रास्ता है कि आप अपने मशीन पर करने के लिए सर्वर पथ मैप किया गया है। उदाहरण के लिए, D:\Test\BuildResources या /home/me/test/buildresources एक स्थानीय पथ है।
  • मैपिंग: सर्वर पथ और स्थानीय पथों के बीच पत्राचार - ताकि टीएफवीसी जानता हो कि जब आप "प्राप्त" करते हैं तो अपनी स्थानीय मशीन पर फ़ाइलों को कहां रखना है।

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

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

// Get the workspace information for the build server's workspace 
var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(sourcesDirectory); 

// Get the TFS Team Project Collection information from the workspace cache 
// information then load the TFS workspace itself. 
var server = new TfsTeamProjectCollection(workspaceInfo.serverUri); 
var workspace = workspaceInfo.GetWorkspace(server); 

एक बार जब आप वर्कस्पेस है, आप पथ मैपिंग के लिए इसे पूछ सकते हैं। यह अपने कार्यक्षेत्र मैपिंग के आधार पर स्थानीय पथ के लिए सर्वर से आवश्यक अनुवाद करेंगे। उदाहरण के लिए:

workspace.GetServerItemForLocalItem("D:\My\Local\Path"); 

और

workspace.GetLocalItemForServerItem("$/My/Server/Path"); 

इस तंत्र केवल काम करते हैं, लेकिन, अगर अपने निर्माण परिभाषा वास्तव में कार्यक्षेत्र इन फ़ाइलों को शामिल करने के लिए सेट करता है। आप कुछ निर्देशिका $/Foo/Bar की जरूरत है, तो आप यकीन है कि यह स्रोत सेटिंग विवरण परिभाषा बिल्ड के टैब में शामिल है बनाने के लिए की आवश्यकता होगी।

+0

धन्यवाद ... मैं वास्तव में आपकी वचन को सही करने की सराहना करता हूं :) मैं इसके साथ खेलूँगा। –

+0

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

+0

मैं '$/टेस्ट/somefolder' जैसी चीजों हालांकि, मैं एक अपवाद कहा, "के लिए {कुछ फ़ोल्डर मैं जानता हूँ कि वहाँ है} कोई काम कर रहे फ़ोल्डर मानचित्रण है" हो रही है पर परीक्षण से बाहर कर रहा हूँ इस सिफारिश। क्या बिल्ड डेफिनिशन सेटअप (उदा। गहराई) उन पथों को प्रभावित करता है जिन्हें मैं हल करने में सक्षम हूं? –

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