• Vs宏 工具汇总


    工作中用到的几个宏,感觉很有用.做一个汇总

    1.把 Dll 拷贝到: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies

    2. 添加  dll 引用,以及 System.Core.dll 4.0

    3.添加 Base 文件 ,如下: 

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports EnvDTE90a
    Imports EnvDTE100
    Imports System.Diagnostics
    Imports System.IO
    Imports System.Windows.Forms
    Imports System.Threading
    Imports System.Linq
    Imports MyCmn
    
    
    Public Module Base
    
        Function GetFileName(ByVal item As EnvDTE.SelectedItem) As String
            If (item.ProjectItem Is Nothing) Then
                GetFileName = item.Project.FullName
            Else
                GetFileName = item.ProjectItem.Properties.Item("FullPath").Value
            End If
        End Function
    
        Public ClipString As String
        'Udi 2012年9月20日
        Function GetClipString()
            ClipString = Clipboard.GetDataObject().GetData(System.Windows.Forms.DataFormats.StringFormat)
        End Function
    
    End Module

    4.添加 Udi 文件(无意义) 

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports EnvDTE90a
    Imports EnvDTE100
    Imports System.Diagnostics
    Imports System.IO
    Imports System.Windows.Forms
    Imports System.Threading
    Imports System.Linq
    Imports MyCmn
    
    
    Public Module Udi
    
        'Udi 2012年9月20日
        Function CopyFileToPath(ByVal fileName As String) As String
            CopyFileToPath = ""
    
            Dim strDesc As String
            Dim strFileName As String
            Dim strSrc As String
            Dim solutionPathArray = DTE.Solution.FullName.Split("\").ToArray()
            Dim path = ""
            Dim process As System.Diagnostics.Process
    
            For i = 0 To solutionPathArray.Length
                If (i = solutionPathArray.Length - 1) Then
                    Exit For
                End If
                path = path + solutionPathArray(i) + "\"
            Next
            'String.Join("\", solutionPathArray.GetSub(1, solutionPathArray.Count() - 1))
            strSrc = fileName
            strDesc = "D:\NewApp_" + Date.Today.ToString("yyyy-MM-dd") + "\" + strSrc.Substring(path.Length)
            Try
                Dim di = New System.IO.FileInfo(strDesc)
                If System.IO.Directory.Exists(di.DirectoryName) = False Then
                    System.IO.Directory.CreateDirectory(di.DirectoryName)
                End If
    
                System.IO.File.Copy(fileName, strDesc, True)
    
            Catch ex As System.Exception
                CopyFileToPath = "目标:[" + strDesc + "]" + vbLf + vbLf + ex.Message
                process = New System.Diagnostics.Process()
                process.StartInfo = New System.Diagnostics.ProcessStartInfo("explorer.exe")
                Dim fi = New FileInfo(strDesc)
                process.StartInfo.Arguments = fi.DirectoryName
                process.Start()
    
            End Try
    
        End Function
    
        'Udi 2012年9月20日
        Sub CopyFileToPathWithMsg()
    
            Dim files = New System.Collections.Generic.List(Of String)
    
            For i As Integer = 1 To DTE.SelectedItems.Count
                Dim fileName = Base.GetFileName(DTE.SelectedItems.Item(i)) ' DirectCast(DTE.SelectedItems.Item(i).ProjectItem, EnvDTE.ProjectItem).Properties.Item("FullPath").Value
                files.Add(fileName)
    
                If (System.IO.Directory.Exists(fileName)) Then
    
                    Dim fs = System.IO.Directory.GetFiles(fileName, SearchOption.AllDirectories)
    
                    For j As Integer = 0 To fs.Length - 1
                        Dim res = CopyFileToPath(fs(j))
                        If (res.Length > 0) Then
                            MsgBox("拷贝失败:" + res, MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly)
                            Exit Sub
                        End If
                    Next
                ElseIf (System.IO.File.Exists(fileName)) Then
    
                    Dim res = CopyFileToPath(fileName)
                    If (res.Length > 0) Then
                        MsgBox("拷贝失败:" + res, MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly)
                        Exit Sub
                    End If
                Else
                    MsgBox("找不到文件:" + fileName)
                    Exit Sub
                End If
    
            Next
    
            MsgBox("拷贝成功: " + vbNewLine + files.Join(vbNewLine), MsgBoxStyle.OkOnly Or MsgBoxStyle.Information, "成功.")
    
        End Sub
    
    
    
        'Udi 2012年9月20日
        Sub SelectInSolution()
            Dim fileFullName = DTE.ActiveDocument.FullName
            Dim solutionFullName = DTE.Solution.FullName
    
            Dim solutionPath = solutionFullName.Substring(0, solutionFullName.LastIndexOf("\"))
    
            Dim filePath = fileFullName.Substring(solutionPath.Length)
    
            Dim soPath = "LongFor_PM\Host" + filePath
    
    
            DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
            DTE.ActiveWindow.Object.GetItem("LongFor_PM\Host").UIHierarchyItems.Expanded = True
    
    
            Dim sect = soPath.Substring("LongFor_PM\Host\".Length).Split("\").ToArray()
    
    
            For i As Integer = 0 To sect.Length - 1
                If sect(i) = "MyBiz" Then sect(i) = "PmBiz"
    
                DTE.ActiveWindow.Object.GetItem("LongFor_PM\Host\" + String.Join("\", System.Linq.Enumerable.Take(sect, i + 1).ToArray())).UIHierarchyItems.Expanded = True
            Next
    
            soPath = soPath.Replace("\MyBiz\", "\PmBiz\")
            DTE.ActiveWindow.Object.GetItem(soPath).Select(vsUISelectionType.vsUISelectionTypeSelect)
    
        End Sub
    
        'Udi 2012年9月20日
        Sub OpenMvc()
    
            Dim ClipBoardThread As System.Threading.Thread
            ClipBoardThread = New System.Threading.Thread(AddressOf Base.GetClipString)
            With ClipBoardThread
                .ApartmentState = ApartmentState.STA
                .IsBackground = True
                .Start()
                '-- Wait for copy to happen
                .Join()
            End With
    
    
    
            ClipBoardThread = Nothing
    
            Dim url = InputBox("输入 LongFor - PM 网址(IIS 需要配置成应用程序),支持如下格式:" + vbNewLine _
                                 + vbNewLine + _
                               "1. http://localhost/pm/Admin/Home/Index.aspx 格式 " + vbNewLine + _
                               "2. /pm/Admin/Home/Index.aspx 格式" + vbNewLine + _
                               "3. ~/Admin/Home/Index.aspx 格式" + vbNewLine + _
                               "4. localhost/pm/Admin/Home/Index.aspx 格式 " + vbNewLine + _
                              "", "直接打开URL小工具", Base.ClipString)
    
            url = url.Trim()
    
            If (url.Length = 0) Then Return
    
            Dim path As String
    
            path = New FileInfo(DTE.Solution.FullName).DirectoryName
    
    
            If (url.StartsWith("http://") = False) Then
    
                If (url.StartsWith("/")) Then
                    url = "http://localhost" + url
                ElseIf (url.StartsWith("~/")) Then
                    url = "http://localhost/pm" + url.Substring(1)
                Else
                    url = "http://" + url
                End If
            End If
    
            Dim sect = url.Substring(url.IndexOf("/", "http://".Length + 1) + 1).Split("/")
    
            Dim area = sect(1)
            Dim controller = sect(2)
            Dim action = sect(3).Split(".")(0)
    
            Dim cs As String
            Dim aspx As String
    
            Dim isMvc = False
    
            If (",Admin,cs,Host,".IndexOf("," + area + ",", StringComparison.CurrentCultureIgnoreCase) >= 0) Then
                path += "\MyWeb\Area\"
                isMvc = True
            ElseIf (",Cost,Master,Sys,Property,Report".IndexOf("," + area + ",", StringComparison.CurrentCultureIgnoreCase) >= 0) Then
                path += "\MyWeb\pm\"
                isMvc = True
            Else
                path += "\MyWeb\"
    
                cs = path + area + "\" + controller + "\" + action + ".aspx.cs"
                aspx = path + area + "\" + controller + "\" + action + ".aspx"
            End If
    
            If (isMvc) Then
                cs = path + area + "\Controllers\" + controller + ".cs"
                If (File.Exists(cs) = False) Then cs = path + area + "\Controllers\" + controller + "Controller.cs"
    
                aspx = path + area + "\Views\" + controller + "\" + action + ".aspx"
            End If
    
            If (File.Exists(cs)) Then
                DTE.ItemOperations.OpenFile(cs)
                FindWord(action)
            End If
    
            If (File.Exists(aspx)) Then DTE.ItemOperations.OpenFile(aspx)
        End Sub
    
    
    
        Sub FindWord(ByVal word As String)
            DTE.ExecuteCommand("Edit.Find")
            DTE.Find.FindWhat = word
            DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
            DTE.Find.MatchCase = True
            DTE.Find.MatchWholeWord = True
            DTE.Find.Backwards = False
            DTE.Find.MatchInHiddenText = False
            DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
            DTE.Find.Action = vsFindAction.vsFindActionFind
            If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
                Exit Sub
            End If
            DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Close()
        End Sub
    
    
        '补全自闭合标签。像 input br meta
        Sub TidyHtmlSolo()
    
            For i As Integer = 1 To DTE.SelectedItems.Count
                Dim fileName = Base.GetFileName(DTE.SelectedItems.Item(i)) 'DirectCast(DTE.SelectedItems.Item(i).ProjectItem, EnvDTE.ProjectItem).Properties.Item("FullPath").Value
    
    
                If (System.IO.Directory.Exists(fileName)) Then
    
                    Dim fs = Directory.GetFiles(fileName, "*.aspx", SearchOption.AllDirectories).ToList()
                    fs.AddRange(Directory.GetFiles(fileName, "*.Master", SearchOption.AllDirectories))
    
                    For j As Integer = 0 To fs.Count - 1
    
                        TidyOneHtmlSolo(fs(j))
    
                    Next
                ElseIf (System.IO.File.Exists(fileName)) Then
                    TidyOneHtmlSolo(fileName)
                Else
                    MsgBox("找不到文件:" + fileName)
                    Exit Sub
                End If
    
            Next
        End Sub
    
        Function TidyOneHtmlSolo(ByVal fileName As String)
            If (File.Exists(fileName) = False) Then
                MsgBox("找不到文件:" + fileName)
                Exit Function
            End If
    
            Dim txt = File.ReadAllText(fileName, System.Text.Encoding.Default)
    
            Dim html = New HtmlCharLoad(txt)
            Dim list = html.Load(HtmlNodeProc.ProcType.None)
    
    
            For i As Integer = 0 To list.Count - 1
                Dim o = list(i)
                If o.Type = HtmlNode.NodeType.Text Then
    
                    Dim txtNode = CType(o, MyCmn.HtmlTextNode).Text.Trim()
                    If (txtNode.StartsWith("<!DOCTYPE", StringComparison.CurrentCultureIgnoreCase)) Then
                        CType(o, MyCmn.HtmlTextNode).Text = "<!DOCTYPE html>"
                    End If
    
                ElseIf o.Type = HtmlNode.NodeType.Tag Then
                    Dim tag = CType(o, HtmlTagNode)
                    If tag.TagName.ToLower().IsIn(New String() {"input", "br", "meta", "link"}) Then
                        If (tag.IsSole = False And i < list.Count - 1) Then
                            Dim n = list(i + 1)
                            If (n.Type <> HtmlNode.NodeType.CloseTag) Then
                                tag.IsSole = True
                            End If
                        End If
    
    
                    ElseIf tag.TagName.Equals("html", StringComparison.CurrentCultureIgnoreCase) Then
                        tag.Attrs.Clear()
    
                        Dim atrId = New HtmlAttrNode()
                        atrId.Name = "id"
                        atrId.Value = "html_" + IIf(fileName.Contains("Main"), "Main", "Style")
    
                        'Dim atrXmlns = New HtmlAttrNode()
                        'atrXmlns.Name = "xmlns"
                        'atrXmlns.Value = "http://www.w3.org/1999/xhtml"
    
                        tag.Attrs.Add(atrId)
                        'tag.Attrs.Add(atrXmlns)
                    End If
                End If
            Next
    
    
            File.WriteAllText(fileName, String.Join("", list.Select(Function(a) a.ToString()).ToArray()), System.Text.Encoding.UTF8)
        End Function
    End Module

    5. 定义快捷键.

    随笔链接:

    Vs宏 之 整理HTML文档格式  http://www.cnblogs.com/newsea/archive/2012/11/23/2784337.html

    VS宏 之 选中解决方案中的文件  http://www.cnblogs.com/newsea/archive/2012/09/06/2673319.html

    Vs宏 之 打开URL指定的文件  http://www.cnblogs.com/newsea/archive/2012/08/13/2636480.html

    VS 宏 之 转换Json数据格式  http://www.cnblogs.com/newsea/archive/2012/05/28/2521368.html

    alarm   作者:NewSea     出处:http://newsea.cnblogs.com/    QQ,MSN:iamnewsea@hotmail.com

      如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。
  • 相关阅读:
    C#之app.config、exe.config和vshost.exe.config作用区别
    C#中decimal ,double,float的区别
    C#中取整,向上取,向下取
    mybatis中的#和$的区别
    mybatis在xml文件中处理大于号小于号的方法
    ORACLE分页查询SQL语法——高效的分页
    移除powerdesigner中Recent Files中无效链接的文件
    Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
    ORA-12638: 身份证明检索失败 的解决办法
    态度决定一切《跟任何人都聊得来》
  • 原文地址:https://www.cnblogs.com/newsea/p/2792457.html
Copyright © 2020-2023  润新知