समस्या:
आप TFS करने के लिए उत्पन्न * .js फ़ाइलों को जोड़ है, तो TFS उन्हें, अगर आप उन्हें चेक इन, या उन्हें बाहर की जाँच नहीं है लिखने-सुरक्षा करता है। तो अगर आप * .ts फ़ाइल बदलने के लिए, यह * .js फ़ाइल, क्योंकि फ़ाइल लेखन-सुरक्षित है उत्पन्न नहीं कर सकते।
==> त्रुटि
लेकिन अगर आप उन में जांच नहीं करते, * .js फ़ाइल अगर आप को तैनात चलाने लापता कर दिया जाएगा।
==> संकलन है, लेकिन रनटाइम त्रुटि
इसके अलावा, अगर आप एक एम्बेडेड संसाधन के रूप में की जरूरत है, तो आप फ़ाइल को अलग नहीं कर सकते हैं ...
अतिरिक्त समस्या 1:
आप को चलाने के "पुनर्निर्माण समाधान" हैं, तो दृश्य स्टूडियो को हटाने के लिए * टाइपप्रति द्वारा उत्पन्न फ़ाइलों .js, इससे पहले कि यह निर्माण कार्यान्वित चाहता है।
लेकिन हटाने संभव नहीं है, क्योंकि * .js फ़ाइलों लिखने के लिए सुरक्षित ... हैं
==> त्रुटि
अतिरिक्त समस्या 2:
साफ नहीं है के बाद से "बनाएँ", पूर्व निर्माण की घटनाओं स्वच्छ पर निष्पादित नहीं कर रहे हैं ...
तो अगर आप पहले से निर्माण पर लिखने-सुरक्षा निकालने, यदि आप "का निर्माण" है काम करेंगे, लेकिन यह यदि आप चुनते हैं "पुनर्निर्माण", चाहे आप इसे समाधान में या परियोजना में क्या पर ध्यान दिए बिना असफल हो जायेगी।
अतिरिक्त समस्या 3:
आप परियोजना सेटिंग्स संपादक में एक पूर्व साफ घटना आदेश को परिभाषित नहीं कर सकते हैं।
तो, यहाँ आप क्या कर सकते हैं:
भागो attrib -r /s(हटा संरक्षण लिखने) अपने typescripted पर * पूर्व निर्माण कार्रवाई के रूप में फाइल .js।
जैसे
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
यह काम करता है क्योंकि * विस्तार किया जाता है:
- यदि फ़ाइल मौजूद नहीं है, वहाँ कोई त्रुटि नहीं है क्योंकि कोई आदेश निष्पादित किया जाता है है।
- फ़ाइल मौजूद है, तो कोई त्रुटि है, आदेश निष्पादित किया जाता है।
आप एक फ़ाइल नाम पर चला चाहते हैं, तो यह करता है, तो फ़ाइल मौजूद नहीं है विफल हो जाएगा।
अब, आप परियोजना फ़ाइल (* .csproj) हाथ से संपादित करने के लिए, एक पूर्व साफ कार्रवाई जोड़ने की जरूरत है।
पूर्व स्वच्छ कार्रवाई पूर्व निर्माण कार्रवाई के समान है।
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
और वहाँ तुम जाओ। अब आप * .js में फ़ाइलों को देख सकते हैं, * .ts फ़ाइल को संपादित कर सकते हैं (आप, या निर्माण बाद में चलाने * .js फ़ाइल असुरक्षित करने की आवश्यकता होगी)
यदि आप एक प्रति फ़ाइल के आधार पर इसे चलाने के लिए चाहते हैं, आदेश है:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
या XML- रूप में:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
और इसके बजाय हटाने की रीड-ओनली पूर्व निर्माण कार्रवाई में थोक विशेषता, आप भी TFS कमांड लाइन उपकरण के साथ अलग-अलग फ़ाइलों की जाँच कर सकते हैं:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
: वैसे, आप यहाँ VisualStudio / MSBuild मैक्रो की एक सूची पा सकते हैं
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= बनाम 2017
और मैक्रो का वास्तविक मूल्य पता लगाने के लिए:
- सही समाधान Explorer में अपने परियोजना पर क्लिक करें, गुण
- चयन घटनाक्रम बिल्ड टैब
- क्लिक करें संपादित करें पूर्व निर्माण या बाद के निर्माण संपादित करें बटन, या तो ठीक है
- विंडो में, क्लिक करें मैक्रो बटन
- यदि आप पाते हैं जब तक इस सूची में नीचे स्क्रॉल
ProjectDir, में अगले फलक अपने वास्तविक मूल्य है
इसके अलावा, बजाय परियोजना में पूर्व निर्माण घटना का उपयोग कर के, आप BeforeBuild लक्ष्य आदेश के रूप में चेकआउट जोड़ सकते हैं। इस तरह कोई भी नहीं accidentially इसे हटा सकते हैं अगर वे परियोजना सेटिंग्स में पूर्व निर्माण में कुछ डाल दिया।
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>