Je suis en train de faire du développement javascript et j'ai trouvé une macro sympa pour classer mon code ("Utilisation de la directive #region avec les fichiers JavaScript dans Visual Studio"). J'ai utilisé ceci sur ma boîte de 32 bits, et cela a fonctionné la première fois. (Visual Studio 2008 SP1, Win7)Les macros Visual Studio sur 64 bits échouent avec l'erreur COM
Pour facile de référence de la macro est:
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Collections
Public Module JsMacros
Sub OutlineRegions()
Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection
Const REGION_START As String = "//#region"
Const REGION_END As String = "//#endregion"
DTE.ExecuteCommand("Edit.StopOutlining")
selection.SelectAll()
Dim text As String = selection.Text
selection.StartOfDocument(True)
Dim startIndex As Integer
Dim endIndex As Integer
Dim lastIndex As Integer = 0
Dim startRegions As Stack = New Stack()
Do
startIndex = text.IndexOf(REGION_START, lastIndex)
endIndex = text.IndexOf(REGION_END, lastIndex)
If startIndex = -1 AndAlso endIndex = -1 Then
Exit Do
End If
If startIndex <> -1 AndAlso startIndex < endIndex Then
startRegions.Push(startIndex)
lastIndex = startIndex + 1
Else
' Outline region ...
selection.MoveToLineAndOffset(CalcLineNumber(text, CInt(startRegions.Pop())), text.Length)
selection.MoveToLineAndOffset(CalcLineNumber(text, endIndex) + 1, 1, True)
selection.OutlineSection()
lastIndex = endIndex + 1
End If
Loop
selection.StartOfDocument()
End Sub
Private Function CalcLineNumber(ByVal text As String, ByVal index As Integer)
Dim lineNumber As Integer = 1
Dim i As Integer = 0
While i < index
If text.Chars(i) = vbCr Then
lineNumber += 1
i += 1
End If
i += 1
End While
Return lineNumber
End Function
End Module
J'ai ensuite essayé d'utiliser la même macro sur deux séparés machines 64 bits (Win7 x64), d'autres identiques que la 64 bits OS version et il ne fonctionne pas. En le parcourant avec l'IDE de Visual Studio Macros, il échoue la première fois sur la ligne DTE.ExecuteCommand ("Edit.StopOutlining") avec une erreur COM (Erreur HRESULT E_FAIL a été renvoyée à partir d'un appel à un composant COM). Si je tente de l'exécuter une deuxième fois, je peux le lancer à partir de l'éditeur de macros sans problème, mais pas depuis Visual Studio avec la commande macro exécuter macro.
J'ai examiné les articles suivants sans rien trouver utile:
- Stackoverflow: Visual Studio 2008 macro fonctionne uniquement à partir de l'IDE Macro, pas la macro Explorateur
- Recorded macro does not run; Failing on DTE.ExecuteCommand
Am I manque quelque chose de stupide?
Trouvé également que la fenêtre de code doit également être focalisée. Si vous avez, par exemple, la fenêtre de sortie VS en focus, la macro ne fonctionnera pas ... pas de surprise mais elle jette l'exception. – Bruce