2010-06-29 13 views
10

में प्रोजेक्ट/सॉल्यूशन में अनुपलब्ध फाइलों में त्रुटि/चेतावनी की रिपोर्ट करें क्या विजुअल स्टूडियो के लिए एक त्रुटि/चेतावनी की रिपोर्ट करने का कोई तरीका है जब आप एक ऐसे समाधान का निर्माण करते हैं जिसमें फाइलें गायब हों (विस्मयादिबोधक वाला पीला त्रिकोण आइकन) जो आवश्यक रूप से हो एक संकलन त्रुटि का कारण बनता है? एक लापता कॉन्फ़िगरेशन फ़ाइल की तरह जो रन-टाइम के दौरान पढ़ा जाता है।विजुअल स्टूडियो

धन्यवाद

+0

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

उत्तर

11

आप एक EnvironmentEvents macro परिभाषित करने की जरूरत। यहां यह कैसे करें: Customize Your Project Build Process पर सामान्य विवरण देखें।

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin 
    For Each proj As Project In DTE.Solution.Projects 
     For Each item As ProjectItem In proj.ProjectItems 
      If (item.Kind <> "{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}") Then ' only check physical file items 
       Continue For 
      End If 

      For i As Integer = 1 To item.FileCount 
       Dim path As String = item.FileNames(i) 
       If Not System.IO.File.Exists(item.FileNames(i)) Then 
        WriteToBuildWindow("!! Missing file:" & item.FileNames(i) + " in project " + proj.Name) 
       End If 
      Next 
     Next 
    Next 
End Sub 

Public Sub WriteToBuildWindow(ByVal text As String) 
    Dim ow As OutputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object 
    Dim build As OutputWindowPane = ow.OutputWindowPanes.Item("Build") 
    build.OutputString(text & Environment.NewLine) 
End Sub 

यह दृश्य स्टूडियो में सीधे "लापता फ़ाइल" पाठ प्रदर्शित करेगा उत्पादन खिड़की "बिल्ड":

और यहाँ कोड आप सीधे मैक्रो वातावरण में पेस्ट लापता फाइलों की जांच करने के कर सकते हैं। यह आपकी जरूरतों को समझने और ट्यून करने के लिए काफी आसान होना चाहिए। उदाहरण के लिए, आप त्रुटि आउटपुट में त्रुटियां जोड़ सकते हैं।

+1

विजुअल स्टूडियो 2012/2013 मैक्रोज़ का समर्थन नहीं करता है, http://stackoverflow.com/questions/20689829/report-error-warning-if-missing-files-in-project-solution-in-visual-studio-2012/ अपडेटेड समाधान के लिए 20711 9 12 # 20711912 – Turch

+0

वीएस 2012 के लिए धन्यवाद और रीडायरेक्ट करें! – granadaCoder

3

जब हमारे पास फाइलें गायब थीं, तो हमें पागल संकलन त्रुटियां मिल रही थीं, जैसे फ़ाइल लिखने में समाप्त होने के बावजूद xyz.pdb लिखने में असमर्थ था। मैंने जो साइमन प्रदान किया था (धन्यवाद!) और इसे थोड़ा सा फ़्लिप किया; विशेष रूप से, मैंने कुछ रिकर्सन जोड़ा और उप-फाइलों (जैसे डेटासेट, कोड-बैक) वाले फ़ोल्डर और फ़ाइलों के लिए समर्थन जोड़ा।

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin 

    For Each proj As Project In DTE.Solution.Projects 
     walkTree(proj.ProjectItems, False) 
    Next 

End Sub 

Private Sub walkTree(ByVal list As ProjectItems, ByVal showAll As Boolean) 

    For Each item As ProjectItem In list 

     ' from http://msdn.microsoft.com/en-us/library/z4bcch80(v=vs.80).aspx 
     ' physical files: {6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C} 
     ' physical folders: {6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C} 

     If (item.Kind = "{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}" OrElse _ 
      item.Kind = "{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}") Then 

      For i As Integer = 1 To item.FileCount ' appears to be 1 all the time... 

       Dim existsOrIsFolder As Boolean = (item.Kind = "{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}" OrElse System.IO.File.Exists(item.FileNames(i))) 

       If (showAll OrElse _ 
        existsOrIsFolder = False) Then 

        WriteToBuildWindow(String.Format("{0}, {1}, {2} ", existsOrIsFolder, item.ContainingProject.Name, item.FileNames(i))) 

       End If 

      Next 

      If (item.ProjectItems.Count > 0) Then 
       walkTree(item.ProjectItems, showAll) 
      End If 

     End If 

    Next 

End Sub 

Private Sub WriteToBuildWindow(ByVal text As String) 
    Dim ow As OutputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object 
    Dim build As OutputWindowPane = ow.OutputWindowPanes.Item("Build") 
    build.OutputString(text & Environment.NewLine) 
End Sub 
0

आप, (उदाहरण के लिए प्रोजेक्ट फ़ोल्डर के उपयोग के साथ लिनक्स-जैसा वातावरण के लिए यदि आप संस्करण नियंत्रण के लिए Git का उपयोग होता है, तो आप शायद शामिल Git बैश इस के लिए उपयोग कर सकते हैं, या यदि आप का उपयोग करें cygwin), यहाँ मेरी बहुत जल्दी और गंदे तरीका है:

grep '<Content Include="' "project_file.csproj" | sed 's/^.*"\([^"]*\)".*/\1/' | sed 's/\\/\//g' | xargs -d'\n' ls > /dev/null 

(यह कैसे काम करता है: मैं ls करने के लिए परियोजना में शामिल किया हर फ़ाइल की कोशिश, और /dev/null को ls कमान की stdout उत्पादन भेजने के लिए, तो यह हो जाएगा छिपी हुई है। अगर कोई फाइल मौजूद नहीं है, तो ls उनके नामों को stdout की बजाय stderr पर बाधित कर देगा, इसलिए वे करेंगे दिखाई दे।)

ध्यान दें कि यह यूआरएल-एन्कोडेड एस्केप को समझ में नहीं आता है, इसलिए यदि आपके प्रोजेक्ट में '(' उनमें वर्णों के साथ फ़ाइल नाम हैं तो आपको कुछ झूठी सकारात्मक चीज़ें मिलेंगी।

+0

अरे, मुझे कुछ दिन से सीखना है क्योंकि यह मेरे लिए एक आकर्षण की तरह काम करता है, बहुत बहुत धन्यवाद :) –

1

अगर किसी और को इस धागे में फंसे हुए हैं, तो plugin है जो आपको आपके प्रोजेक्ट से अनुपलब्ध होने पर एक बिल्ड त्रुटि देगा।

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