Вот ваш макрос, но для установки точек останова на 1000+ функций требуется некоторое время ... и это замедлит Visual Studio!
Sub BreakAtEveryFunction()
For Each project In DTE.Solution.Projects
SetBreakpointOnEveryFunction(project)
Next project
End Sub
' Macro editor
Sub SetBreakpointOnEveryFunction(ByVal project As Project)
Dim cm = project.CodeModel
' Look for all the namespaces and classes in the
' project.
Dim list As List(Of CodeFunction)
list = New List(Of CodeFunction)
Dim ce As CodeElement
For Each ce In cm.CodeElements
If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
' Determine whether that namespace or class
' contains other classes.
GetClass(ce, list)
End If
Next
For Each cf As CodeFunction In list
DTE.Debugger.Breakpoints.Add(cf.FullName)
Next
End Sub
Sub GetClass(ByVal ct As CodeElement, ByRef list As List(Of CodeFunction))
' Determine whether there are nested namespaces or classes that
' might contain other classes.
Dim aspace As CodeNamespace
Dim ce As CodeElement
Dim cn As CodeNamespace
Dim cc As CodeClass
Dim elements As CodeElements
If (TypeOf ct Is CodeNamespace) Then
cn = CType(ct, CodeNamespace)
elements = cn.Members
Else
cc = CType(ct, CodeClass)
elements = cc.Members
End If
Try
For Each ce In elements
If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
GetClass(ce, list)
End If
If (TypeOf ce Is CodeFunction) Then
list.Add(ce)
End If
Next
Catch
End Try
End Sub
PowerShell был фактически построен как несколько вещей: зрелая и расширяемая платформа автоматизации и современная административная оболочка.
Первая в основном используется для графических интерфейсов администрирования для Exchange и других серверных продуктов последнее время. Графический интерфейс пользователя - это просто оболочка вокруг PowerShell, которая выполняет тяжелую работу (вроде как программы с графическим интерфейсом пользователя UNIX становятся оболочкой для программы командной строки).
Джеффри Сновер (изобретатель PowerShell) немного уточняет о том, как создавался PowerShell, какие цели и задачи он должен решать.
На мой взгляд, PowerShell как оболочка явно предназначен для замены cmd (легко увидеть) и Windows Script Host (Windows Script Host не привлекал особого внимания в последние годы, хотя он имел те же концепции, что и .NET. в свое время [одна платформа, несколько языков с ActiveScripting], но с .NET Microsoft в основном положила это на покой, и воскрешение, вероятно, не было для них вариантом).
Он объединяет большинство аспектов администрирования Windows в общих концепциях и методы, которые вам нужно изучить только один раз. Кроме того, мощь PowerShell для меня во многом проистекает из того, что он передает объекты, которые могут объяснить, почему у вас возникают проблемы, когда вы выходите из мира .NET / PowerShell, где вы получаете только String []
из команда. Но для многих вещей вы бы назвали внешнюю программу в cmd,
Как разработчик, я могу вам сказать, что у меня больше нет кучи проектов ConsoleApplication42, лежащих в папке.
Как разработчик в небольшой компании, где я в основном занимаюсь ИТ (администратор баз данных, управление маршрутизаторами, извлечение подробных записей о звонках с коммутатора, мониторинг и графическая пропускная способность для клиентов и т. Д.), Я могу сказать вам, что PowerShell заполняет Крайне необходимый пробел в Windows и тот факт, что он построен на .NET, обеспечивает беспрепятственный путь обновления, когда конвейер PowerShell слишком медленный для обработки миллионов итераций или требуется более постоянная, строго типизированная реализация.
В любом случае, я думаю, вопрос в том, почему вы переходите на PowerShell, если у вас нет острой необходимости? Я имею в виду, что сейчас это хорошо, так как это ' в основном новый интерфейс управления для всех вещей Microsoft. Но если это не повлияет на вас, не беспокойтесь, если вы не думаете, что получаете что-либо.
EDIT (в ответ на комментарии ниже)
Похоже, вы пытаетесь использовать. NET Process для запуска исполняемого файла и перенаправления его стандартного вывода, чтобы его мог прочитать вызывающий. Я согласен, что это проблема .NET, но, к счастью, PowerShell делает все это за вас довольно просто. Что касается захвата результата и записи его на дисплей, это тоже довольно просто, хотя эта команда не очень известна, потому что она не так часто используется. Вот пример:
# I always find it easier to use aliases for external commands
Set-Alias csc C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe
# Create some source file
Set-Content test.cs @"
class Program {
static void Main() {
System.Console.WriteLine("Hello World");
}
}
"@
# Call CSC.EXE
# the output of csc.exe is written to results.txt and piped
# to the host (or select-string if you prefer)
csc test.cs | Tee-Object -file results.txt
# Check for errors
if ($LASTEXITCODE) {
# this is where community extensions would come in
# handy. powershell 2.0 also has a command to send
# mail but in 1.0 you can grab one from poshcode.org
}
ИМХО, основным преимуществом является разумное вырезание и вставка в командной консоли.
В противном случае я использую ActiveState ActivePerl для написания сценариев в Windows. Он намного мощнее любого сценария оболочки Windows, а интерфейс OLE предоставляет доступ ко всему Windows API простым в использовании способом.