मैं एमएसबिल्ड के लिए बिल्कुल नया हूं, और मैंने एक डब्लूपीएफ परियोजना फाइल पर कुछ अनुकूलन किया है जिसे मैं वीएस -2010 और टीएफएस -2010 में बना रहा हूं। मैं उत्पादन पथ अनुकूलित के रूप में निम्नानुसार है:
<OutputPath Condition=" '$(TeamBuildOutDir)' == '' ">$(SolutionDir)build\binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
<OutputPath Condition=" '$(TeamBuildOutDir)' != '' ">$(TeamBuildOutDir)binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
यह जब डेस्कटॉप पर निर्माण मुझे एक केंद्रीकृत बाइनरी निर्देशिका को बनाने की अनुमति देता है, और जब सीआई बनाता चला रहे हैं बाइनरी खोजने के लिए TFS अनुमति देता है।
हालांकि, ऐसा लगता है कि दोनों मामलों में, $ (ProjectDir) संपत्ति बिल्डटाइम पर '' का मूल्यांकन कर रही है, जो अजीब परिणाम बनाती है। कुछ डिबगिंग करना, ऐसा प्रतीत होता है जैसे $ (ProjectName) उस समय तक सेट किया गया है जब पहले बिल्डिंग निष्पादित करता है, लेकिन मेरी आउटपुटपाथ संपत्ति उस बिंदु से पहले इसका मूल्यांकन कर रही है।
<ProjectNameUsedTooEarly Condition=" '$(ProjectName)' == '' ">true</ProjectNameUsedTooEarly>
पूर्ववर्ती संपत्ति मेरे आउटपुटपाथ संपत्ति के समान संपत्ति समूह में है। पहलेबिल्ड लक्ष्य में, $ (ProjectNameUsedTooEarly) सत्य पर मूल्यांकन करता है, लेकिन $ (ProjectName) उस बिंदु से सामान्य रूप से प्रोजेक्ट नाम का मूल्यांकन करता है।
यह सुनिश्चित करने के लिए मैं क्या कर सकता हूं कि जब मैं इसका उपयोग करता हूं तो $ (ProjectName) का मूल्य प्राप्त होता है?
संपादित करें: मैंने अभी अपनी बिल्ड फ़ाइल के माध्यम से डीबग करने के लिए अट्राइस के एमएसबिल्ड साइडकिक का उपयोग किया है, और ब्रेकपॉइंट (_CheckForInvalidConfigurationAndPlatform) के लिए उपलब्ध पहले लक्ष्य में सभी गुण पहले से ही सेट होने लगते हैं। ProjectName पहले से ही सही ढंग से सेट है, लेकिन मेरी आउटपुटपाथ प्रॉपर्टी पहले ही प्रोजेक्टनाम के खाली मूल्य का उपयोग कर सेट कर दी गई है।
हाँ, तुम सही हो। मुझे यह जांचने में बहुत कुछ मिला है। मुझे लगता है कि मेरा खुद का भ्रम इस तथ्य से उत्पन्न होता है कि मैं अभी तक सामान्य.targets, csharp.targets, csproj फ़ाइल में प्रश्न, इत्यादि के अनुक्रम को समझ नहीं पा रहा हूं। 2. मुझे प्री-बिल्ड मैक्रो पेज से प्रोजेक्टनाम मिला है प्रोजेक्ट के प्रॉपर्टी पेज - मुझे जांच करने की आवश्यकता होगी कि MSBuildProjectName टीम निर्माण के लिए उपलब्ध है या नहीं। MSBuildProjectName कहां से आता है? कोई विचार यह कैसे आपूर्ति की जाती है? – bwerks
3. स्पष्ट रूप से बदनाम और अप्रभावी IsDesktopBuild को $ (BuildingInsideVisualStudio) के साथ प्रतिस्थापित किया गया है, लेकिन मुझे लगता है कि यह मेरे निर्माण लॉग में संपत्ति को देख रहा है।TeamBuildOutDir के लिए, आप सही हैं - यह सामान्य वीएस बिल्ड में सेट नहीं है, इसलिए आप वास्तव में इसके अस्तित्व के आधार पर प्रतिक्रिया करते हैं। मुझे वास्तव में http://blogs.msdn.com/aaronhallberg/archive/2007/06/07/preserving-output-directory- संरचनाओं-in-orcas-team-build.aspx से विचार मिला। – bwerks
+1: मैंने बस दोपहर में अपने सिर को '$ (प्रोजेक्टनाम) पर मारने के लिए बिताया, अभी तक सेट नहीं किया जा रहा है। वह मुझे स्टैक ओवरफ़्लो पहले जांचने के लिए सिखाएगा ... –