visual studio विजुअल स्टूडियो में बिल्डिंग टाइम्स प्रदर्शित करना?




visual-studio msbuild (9)

टूल्स ... विकल्प ... प्रोजेक्ट्स एंड सॉल्यूशंस .... एमएसबिल्ड प्रोजेक्ट बिल्ड आउटपुट वर्बोजिटी - "सामान्य" या "विस्तृत" पर सेट है, और बिल्ड टाइम आउटपुट विंडो में दिखाई देगा

हमारे निर्माण सर्वर को हमारी सी ++ परियोजनाओं में से एक बनाने के लिए बहुत लंबा समय लग रहा है। यह विजुअल स्टूडियो 2008 का उपयोग करता है। क्या समाधान में प्रत्येक परियोजना को बनाने के लिए किए गए समय को लॉग करने के लिए devenv.com प्राप्त करने का कोई तरीका है, ताकि मुझे पता चले कि मेरे प्रयासों पर ध्यान केंद्रित करना है?

बेहतर हार्डवेयर इस मामले में एक विकल्प नहीं है।

मैंने आउटपुट वर्बोजिटी (टूल्स / ऑप्शंस / प्रोजेक्ट्स एंड सॉल्यूशंस / बिल्ड एंड रन / एमएसबिल्ड प्रोजेक्ट बिल्ड आउटपुट वर्बोजिटी) के तहत सेट करने का प्रयास किया है। ऐसा लगता है कि आईडीई में कोई प्रभाव नहीं पड़ता है।

कमांड लाइन से MSBuild चलाते समय (और, विजुअल स्टूडियो 2008 के लिए, इसे MSBuild v3.5 होना आवश्यक है), यह अंत में समाप्त होने वाला कुल समय प्रदर्शित करता है, लेकिन आईडीई में नहीं।

मैं वास्तव में समाधान में प्रत्येक परियोजना के लिए एक समय-समय पर रिपोर्ट चाहता था, ताकि मैं पता लगा सकूं कि निर्माण प्रक्रिया अपना समय कहां ले रही थी।

वैकल्पिक रूप से, चूंकि हम वास्तव में निर्माण प्रक्रिया को चलाने के लिए NANT का उपयोग करते हैं (हम जेटब्रेन टीमसिटी का उपयोग करते हैं), क्या एनएएनटी को प्रत्येक चरण के लिए मुझे बताए गए समय को बताने का कोई तरीका है?


पहले एक बिल्ड करें और देखें कि कौन सा प्रोजेक्ट बिल्ड आउटपुट में पहले दिखाई दे रहा है (आउटपुट विंडो में Ctrl + Home )। उस प्रोजेक्ट पर राइट क्लिक करें → प्रोजेक्ट प्रॉपर्टीजकंपाइलबिल्ड इवेंट्सप्री-बिल्ड । और echo ###########%date% %time%#############

तो हर बार जब आप निर्माण परिणाम देखते हैं (या निर्माण के दौरान) आउटपुट विंडो में Ctrl + Home करते हैं। और उस क्षेत्र में कहीं भी समय और तारीख आपके चेहरे पर नजर रखती है!

ओह और आप इन विवरणों को कई परियोजनाओं में जोड़ सकते हैं क्योंकि बिल्ड ऑर्डर बदल सकता है :)

मुझे एक बेहतर समाधान मिला! ###

टूल्सविकल्पप्रोजेक्ट्स एंड सॉल्यूशंसबिल्ड और रनएमएसबिल्ड प्रोजेक्ट बिल्ड आउटपुट वर्बोजिटी = सामान्य (या न्यूनतम से ऊपर)। यह आउटपुट विंडो की शुरुआत / शीर्ष में समय जोड़ता है। आउटपुट विंडो में Ctrl + होम करना चाहिए।

अगर हम देखना चाहते हैं कि प्रत्येक परियोजना कितनी बार लेती है तो परियोजनाएं और समाधानवीसी ++ परियोजना सेटिंग्ससमय बनाना = हां । यह सभी परियोजनाओं पर लागू है; "वीसी ++" भ्रामक है।


यदि आप एक बाहरी प्रोग्राम का आह्वान करना चाहते हैं जो आपके कुल निर्माण समय को ट्रैक कर सकता है, तो आप वीएस 2010 (और शायद पुराने) के लिए निम्न समाधान का उपयोग कर सकते हैं। नीचे दिया गया कोड केसी मुरोटेरी द्वारा सीटीएम का उपयोग करता है। बेशक आप इसे बिल्ड समय को प्रिंट करने के लिए भी इस्तेमाल कर सकते हैं।

मैक्रो एक्सप्लोरर खोलें, और End Module से पहले निम्नलिखित पेस्ट करें:

Dim buildStart As Date
Private Sub RunCtime(ByVal StartRatherThanEnd As Boolean)
    Dim Arg As String
    Dim psi As New System.Diagnostics.ProcessStartInfo("ctime.exe")
    If StartRatherThanEnd Then
        psi.Arguments = "-begin"
    Else
        psi.Arguments = "-end"
    End If
    psi.Arguments += " c:\my\path\build.ctm"
    psi.RedirectStandardOutput = False
    psi.WindowStyle = ProcessWindowStyle.Hidden
    psi.UseShellExecute = False
    psi.CreateNoWindow = True
    Dim process As System.Diagnostics.Process
    process = System.Diagnostics.Process.Start(psi)
    Dim myOutput As System.IO.StreamReader = process.StandardOutput
    process.WaitForExit(2000)
    If process.HasExited Then
        Dim output As String = myOutput.ReadToEnd
        WriteToBuildWindow("CTime output: " + output)
    End If
End Sub

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
    WriteToBuildWindow("Build started!")
    buildStart = Date.Now
    RunCtime(True)
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
    Dim buildTime = Date.Now - buildStart
    WriteToBuildWindow(String.Format("Total build time: {0} seconds", buildTime.ToString))
    RunCtime(False)
End Sub

Private Sub WriteToBuildWindow(ByVal message As String)
    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = CType(win.Object, OutputWindow)
    If (Not message.EndsWith(vbCrLf)) Then
        message = message + vbCrLf
    End If
    ow.OutputWindowPanes.Item("Build").OutputString(message)
End Sub

here और here से लिया गया उत्तर।


मैं यहां समाप्त हुआ क्योंकि मैं बस निर्माण आउटपुट में शामिल दिनांक और समय चाहता था। दूसरों को कुछ ऐसा खोजना चाहिए जैसा कि प्री-बिल्ड और / या प्रोजेक्ट के तहत पोस्ट-बिल्ड इवेंट्स में गुण %%%%%% जोड़ने के रूप में सरल है, गुणसंकलनबिल्ड ईवेंट


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


यदि आप वीएस 2005 पर फंस गए हैं तो आप बनाम-बिल्ड-टाइमर प्लगइन का उपयोग कर सकते हैं। एक निर्माण के पूरा होने पर यह परियोजना के प्रत्येक अवधि के कुल समय और एक (वैकल्पिक) सारांश दिखाता है।

अस्वीकरण; मैने यह लिखा। और हाँ, मुझे एक इंस्टॉलर बनाने की जरूरत है ... एक दिन!


मेनू टूल्सविकल्पप्रोजेक्ट्स और सॉल्यूशंसवीसी ++ प्रोजेक्ट सेटिंग्सबिल्डिंग टाइम काम करना चाहिए।


चूंकि आपके प्रश्न में कमांड लाइन से DevEnv का उपयोग करना शामिल है, इसलिए मैं एमएसबिल्ड का उपयोग करने का भी सुझाव दूंगा (जो संशोधन के बिना .sln फ़ाइलों को बना सकता है)।

msbuild /fl /flp:Verbosity=diagnostic Your.sln

msbuild /? फाइललॉगर के लिए आपको अन्य उपयोगी विकल्प दिखाएंगे।


यदि आप अपने निर्माण को कल्पना करना चाहते हैं तो आप IncrediBuild का उपयोग कर सकते हैं। IncrediBuild अब विजुअल स्टूडियो 2015 अपडेट 1 के हिस्से के रूप में मुक्त करने के लिए स्टैंडअलोन-मोड में वितरित नहीं है (वितरित नहीं है बल्कि केवल आपकी स्थानीय मशीन पर 8 कोर पर उपयोग के लिए)

अस्वीकरण: मैं IncrediBuild के लिए काम करता हूं





build-process