2009-01-06 13 views
10

कोई व्यक्ति विजुअल स्टूडियो मैक्रो पोस्ट कर सकता है जो किसी प्रोजेक्ट में सभी सी # स्रोत फ़ाइलों के माध्यम से जाता है और फ़ाइल बैनर जोड़ता है? अतिरिक्त क्रेडिट अगर यह किसी भी प्रकार की स्रोत फ़ाइल (.cs, .xaml, आदि) के लिए काम करता है।सभी सी # फाइलों में बैनर जोड़ने के लिए विजुअल स्टूडियो मैक्रो की आवश्यकता है

+0

वी.एस. 2013 से एक अच्छा ऐड-इन है [Rubicon आईटी] (http://licensemanager.codeplex.com/) आप के साथ हर फाइल करने के लिए जोड़ने, हटाने और अद्यतन एक हैडर के लिए अनुमति देता है जो आपके लाइसेंस फ़ाइल में घोषित एक्सटेंशन का प्रकार। टूल्स -> 'एक्सटेंशन और अपडेट्स' -> 'ऑनलाइन' -> 'हेडर' के लिए खोजें और परिणाम 'लाइसेंस शीर्षलेख प्रबंधक' पर जाकर सीधे इंस्टॉल करें। अब बस अपने प्रोजेक्ट फ़ोल्डर पर राइट-क्लिक करें और नए 'लाइसेंस हेडर' मेनू का उपयोग करें। –

उत्तर

14
यहाँ आप जाओ, मैं .cs और .vb के लिए एक उदाहरण प्रदान करते हैं, लेकिन आप अपने अन्य फ़ाइल प्रकार के लिए इसे समायोजित करने के लिए के लिए मुश्किल नहीं होना चाहिए की जरूरत है

: संपादित रिकर्सिवली उप करने के लिए शीर्ष लेख जोड़ने के लिए -folders

Sub IterateFiles() 
    Dim solution As Solution = DTE.Solution 
    For Each prj As Project In solution.Projects 
     IterateProjectFiles(prj.ProjectItems) 
    Next 
End Sub 

Private Sub IterateProjectFiles(ByVal prjItms As ProjectItems) 
    For Each file As ProjectItem In prjItms 
     If file.SubProject IsNot Nothing Then 
      AddHeaderToItem(file) 
      IterateProjectFiles(file.ProjectItems) 
     ElseIf file.ProjectItems IsNot Nothing AndAlso file.ProjectItems.Count > 0 Then 
      AddHeaderToItem(file) 
      IterateProjectFiles(file.ProjectItems) 
     Else 
      AddHeaderToItem(file) 
     End If 
    Next 
End Sub 

Private Sub AddHeaderToItem(ByVal file As ProjectItem) 
    DTE.ExecuteCommand("View.SolutionExplorer") 
    If file.Name.EndsWith(".cs") OrElse file.Name.EndsWith(".vb") Then 
     file.Open() 
     file.Document.Activate() 

     AddHeader() 

     file.Document.Save() 
     file.Document.Close() 
    End If 
End Sub 

Private Sub AddHeader() 
    Dim cmtHeader As String = "{0} First Line" 
    Dim cmtCopyright As String = "{0} Copyright 2008" 
    Dim cmtFooter As String = "{0} Footer Line" 

    Dim cmt As String 

    Select Case DTE.ActiveDocument.Language 
     Case "CSharp" 
      cmt = "//" 
     Case "Basic" 
      cmt = "'" 
    End Select 
    DTE.UndoContext.Open("Header Comment") 
    Dim ts As TextSelection = CType(DTE.ActiveDocument.Selection, TextSelection) 
    ts.StartOfDocument() 
    ts.Text = String.Format(cmtHeader, cmt) 
    ts.NewLine() 
    ts.Text = String.Format(cmtCopyright, cmt) 
    ts.NewLine() 
    ts.Text = String.Format(cmtFooter, cmt) 
    ts.NewLine() 
    DTE.UndoContext.Close() 
End Sub 
+0

धन्यवाद, मैं ब्लॉग के लिंक वाले व्यक्ति के बजाय इस के लिए वोट देना चाहता हूं, क्योंकि इससे पता चलता है कि परियोजनाओं को कैसे समझाया जाए। – DSO

+0

यह उन फ़ाइलों के लिए कितना अच्छा काम करता है जिनमें डिज़ाइनर हैं, जैसे WinForms? –

+0

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

5
+0

वाह - महान जवाब। बहुत बुरा ओपी Google को ग्रोक नहीं लग रहा है। –

+5

लिंक के लिए धन्यवाद। ओनोरियो, मैंने Google को आजमाया लेकिन "हेडर" के बजाय "बैनर" शब्द का उपयोग किया ... जो पूरी तरह से अलग-अलग परिणाम देता है। पता नहीं क्यों, मैंने हमेशा उन्हें बैनर कहा है। बेशक अब इस पोस्ट के कारण, "बैनर" शब्द का उपयोग करके यह पोस्ट वापस आती है! – DSO

1

यहाँ यह की jist है। नहीं, मैंने इसे डीबग नहीं किया है, यह पाठक के लिए एक अभ्यास है। और, यह मेरे सिर के ऊपर से किया जाता है। (फ़ाइल कमेंटर को छोड़कर ... यह एक असली मैक्रो है जिसका मैं उपयोग करता हूं)।

function CommentAllFiles 
    option explicit 

    Dim ActiveProjectFullName 
    Dim dte80 As EnvDTE80.Solution2 

    ActiveProjectFullName = dte80.Projects.Item(0).FullName 
    If ActiveProjectFullName = "" Then 
     MsgBox("No project loaded!") 
     Exit Sub 
    End If 

    Err.Number = 0 
    doc.Open(ActiveProjectFullName, "Text", True) 
    If Err.Number <> 0 Then 
     MsgBox("Open " + ActiveProjectFullName + " failed: " & Hex(Err.Number)) 
     Exit Sub 
    End If 

    ActiveDocument.Goto(1, 1, vsMovementOptions.vsMovementOptionsMove) 

    ' Build search string 
    Dim SearchString 
    Dim vsFindOptionsValue As Integer 
    SearchString = "^SOURCE=.*" + dn + "$" 

    while ActiveDocument.Selection.FindText(SearchString, vsFindOptions.vsFindOptionsFromStart + vsFindOptions.vsFindOptionsRegularExpression) 
     Dim TheFile 
     TheFile = ActiveDocument.Selection.Text 
     TheFile = Mid(TheFile, 8) 
     doc.Open(TheFile) 
    wend 
    ActiveDocument.Close() 
end function 

की कोशिश की और सच "फूल बॉक्स" योजक:

Function IsClassDef() 
    Dim ColNum 
    Dim LineNum 
    Dim sText 

    sText = ActiveDocument.Selection.ToString() 
    If sText = "" Then 
     'ActiveDocument.Selection.WordRight(dsExtend) 
     'sText = ActiveDocument.Selection 
     'sText = ucase(trim(sText)) 
    End If 

    If (sText = "CLASS") Then 
     IsClassDef = True 
    Else 
     IsClassDef = False 
    End If 
End Function 

Sub AddCommentBlock() 
    'DESCRIPTION: Add Commecnt block to header, CPP files and Class Defs 
    AddCPPFileDesc() 
End Sub 

Sub AddCPPFileDesc() 
    'DESCRIPTION: Add File desc block to the top of a CPP file 
    Dim selection As EnvDTE.TextSelection 
    ActiveDocument.Selection.StartOfLine() 

    Dim editPoint As EnvDTE.EditPoint 
    selection = DTE.ActiveDocument.Selection() 
    editPoint = selection.TopPoint.CreateEditPoint() 

    Dim bOk, sExt, IsCpp, IsHdr, sHeader, IsCSharp 
    bOk = True 
    IsCpp = False 
    IsCSharp = False 

    If ActiveDocument.Selection.CurrentLine > 10 Then 
     If MsgBox("You are not at the top of the file. Are you sure you want to continue?", vbYesNo + vbDefaultButton2) = vbNo Then 
      bOk = False 
     End If 
    End If 

    If (bOk) Then 
     sExt = ucase(right(ActiveDocument.Name, 4)) 
     IsCpp = sExt = ".CPP" 
     IsHdr = Right(sExt, 2) = ".H" 
     IsCSharp = sExt = ".CS" 

     If (IsCpp) Then 
      sHeader = left(ActiveDocument.Name, len(ActiveDocument.Name) - 3) + "h" 
      FileDescTopBlock(1) 
      editPoint.Insert("#include " + Chr(34) + "StdAfx.h" + Chr(34) + vbLf) 
      editPoint.Insert("#include " + Chr(34) + sHeader + Chr(34) + vbLf) 
     ElseIf (IsCSharp) Then 
      FileDescTopBlock(1) 
     Else 
      If IsHdr Then 
       'If IsCLassDef() Then 
       'AddClassDef() 
       'Else 
       AddHeaderFileDesc() 
       'End If 
      Else 
       FileDescTopBlock(1) 
      End If 
     End If 
    End If 
End Sub 

Sub AddHeaderFileDesc() 
    FileDescTopBlock(0) 
    Dim selection As EnvDTE.TextSelection 
    ActiveDocument.Selection.StartOfLine() 

    Dim editPoint As EnvDTE.EditPoint 
    selection = DTE.ActiveDocument.Selection() 
    editPoint = selection.TopPoint.CreateEditPoint() 
    editPoint.Insert("#pragma once" + vbLf) 
End Sub 


Sub FileDescTopBlock(ByVal HasRevHistory) 
    'DESCRIPTION: Add File desc block to the top of a CPP file 
    Dim selection As EnvDTE.TextSelection 

    ActiveDocument.Selection.StartOfLine() 
    ActiveDocument.Selection.EndOfLine() 
    Dim sComment 
    sComment = ActiveDocument.Selection.ToString() 
    If Left(sComment, 2) = "//" Then 
     ActiveDocument.Selection.Delete() 
     sComment = LTrim(Mid(sComment, 3)) 
    Else 
     sComment = "" 
    End If 

    Dim sLineBreak 
    Dim sFileName 
    Dim sBlock 
    sLineBreak = "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////" 
    sFileName = ActiveDocument.Name 

    ActiveDocument.Selection.StartOfDocument() 
    sBlock = sLineBreak & vbLf & _ 
      "// File : " & sFileName & vbLf & _ 
      "// Author : Larry Frieson" & vbLf & _ 
      "// Desc : " & sComment & vbLf & _ 
     "// Date : " & CStr(Now.Date()) & vbLf & _ 
     "//" & vbLf & _ 
     "// Copyright © 20" + Right(CStr(Now.Year.ToString()), 2) + " MLinks Technologies. All rights reserved" + vbLf 
    If (HasRevHistory > 0) Then 
     sBlock = sBlock & _ 
       "//" & vbLf & _ 
       "// Revision History: " & vbLf & _ 
       "// " & CStr(Now) & " created." & vbLf & _ 
      "// " & vbLf 
    End If 
    sBlock = sBlock + sLineBreak + vbLf 

    Dim editPoint As EnvDTE.EditPoint 
    selection = DTE.ActiveDocument.Selection() 
    editPoint = selection.TopPoint.CreateEditPoint() 
    editPoint.Insert(sBlock) 

End Sub 

आशा इस मदद करता है, या कम से कम आप कुछ विचार देता है। दोबारा, मैंने "स्रोत फ़ाइल लूपर" का परीक्षण/डीबग नहीं किया, मुझे लगता है कि आप इसे संभाल सकते हैं।

लैरी

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

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