2017年10月 / 09月≪ 12345678910111213141516171819202122232425262728293031≫11月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2008.09.08 (Mon)

.NETのマクロで引数を設定してデバッグ起動


Sub Execute()
Dim proj As Project
Dim props As Properties
'プロジェクトオブジェクト取得(先頭の)
proj = DTE.ActiveSolutionProjects(0)
'デバッグのプロパティオブジェクト取得
props = proj.ConfigurationManager.Item("Debug", ".NET").Properties
'引数を「/B /UserId=1111」にする
props.Item("StartArguments").Value = "/B /UserId=1111"
'デバッグ起動
DTE.Debugger.Go(True)
End Sub


●Propertiesオブジェクトの"StartArguments"が以下の「コマンドライン引数」に当たる。
aaaa.jpg
スポンサーサイト


 |  14:42  |  C#.NET  |  トラックバック(0)  |  コメント(0)  |  Top↑

2008.05.13 (Tue)

参照されていないメソッドを探すマクロその2

前回の「参照されていないメソッドを探すマクロ」の検索結果表示方法を変更しただけのもの。
今回は検索して見つかったメソッド名を再度検索処理して「検索結果1」ウィンドウに無理やり出力させてます。

Sub SearchAllFunctionReference()
Dim textSelection As EnvDTE.TextSelection
Dim codeElement As EnvDTE.CodeElement
Dim codeElements As EnvDTE.CodeElements
Dim classElement As EnvDTE.CodeElement
Dim codeModel As EnvDTE.FileCodeModel = DTE.ActiveDocument.ProjectItem.FileCodeModel
Dim i, j, k As Integer
Dim existcount As Integer
Dim namelist(0) As String

existcount = 0

For i = 1 To codeModel.CodeElements.Count
codeElement = codeModel.CodeElements.Item(i)
If codeElement.Kind = vsCMElement.vsCMElementNamespace Then
'クラスを取得
Dim classElements = codeElement.Children()

For j = 1 To codeElement.Children().Count
If codeElement.Children().Item(j).Kind = vsCMElement.vsCMElementClass Then
classElement = codeElement.Children().Item(j)
For k = 1 To classElement.Children.Count
If classElement.Children().Item(k).Kind = vsCMElement.vsCMElementFunction Then
'参照の検索
Dim cnt As Integer
cnt = SearchReference(classElement.Children().Item(k))
If cnt <= 1 Then
ReDim Preserve namelist(existcount)
namelist(existcount) = classElement.Children().Item(k).Name
existcount += 1
End If
End If
Next
End If
Next
End If
Next

If existcount > 1 Then
MsgBox(String.Format("参照されていないメソッドが {0}個見つかりました", existcount))

'検索結果1ウィンドウに出力
Dim find1win As Window
Dim sel As TextSelection

find1win = DTE.Windows.Item(Constants.vsWindowKindFindResults1)
sel = find1win.Selection

DTE.Find.FindWhat = "(" & Join(namelist, "|") & ")"
DTE.Find.MatchCase = True '大文字小文字一致
DTE.Find.MatchWholeWord = True '完全に一致する単語
DTE.Find.MatchInHiddenText = True '非表示のも
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr '正規表現
DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResults1 '検索結果表示ウィンドウ?
DTE.Find.Action = vsFindAction.vsFindActionFindAll 'すべて検索
Else
MsgBox("参照されていないメソッドは見つかりませんでした。")
End If

End Sub
Function SearchReference(ByVal codeElement As EnvDTE.CodeElement) As Integer
Dim textSelection As EnvDTE.TextSelection
Dim resultcount As Integer
Dim rescaption As String

Dim regex As New System.Text.RegularExpressions.Regex(" - [0-9]+")

textSelection = DTE.ActiveDocument.Selection
Try
If Not (codeElement Is Nothing) Then
textSelection.MoveToPoint(codeElement.GetStartPoint(vsCMPart.vsCMPartHeader))
'エレメント名選択
textSelection.FindText(codeElement.Name, vsFindOptions.vsFindOptionsMatchCase)
'すべての参照の検索を実行
DTE.ActiveDocument.Activate()
DTE.ExecuteCommand("Edit.FindAllReferences")
rescaption = DTE.Windows.Item(Constants.vsWindowKindFindSymbolResults).Caption

'検索結果ウィンドウのタイトルから件数を取得
resultcount = CType(regex.Match(rescaption).Value.Substring(3), Integer)

Return resultcount

End If
Catch ex As Exception
End Try

End Function


出力部分を変えただけなので相変わらずごっちゃのままですがとりあえず使えます。
VBだと配列の宣言時に指定するのは要素数じゃなくて最大インデックス値なのな。


 |  11:29  |  プログラム全般  |  トラックバック(0)  |  コメント(0)  |  Top↑

2008.05.12 (Mon)

Visual Studio 2005 でマクロが動かない!

Visual Studio Macros画面で「ビルド」を押してもF5を押しても何の反応も無い!
マクロの記録はできるのに実行されない!!!
ビルドされてるのか、ビルドされてないのかもわからない!!
エラーとか何も出ず、何の反応もされないから何が起こってどう対処していいのかわからない!!

マクロ使えないとすんげえ困るんですけど!


なので必死で調べて、解決方法を探しました。
調べ辛かった・・・

何とかたどりついたのがこれ
FIX: マクロは Visual Studio 2005 で実行できません。
このページを引っ掛けるのに何時間かかったことか・・・orz

解決方法はこのページに書いてある通り、
Visual Studio 2005 Service Pack をインストールする
ということ。

このサービスパックが431.1 MBというでかさ。これをインストールするのかと思うとHDDが少々心配。

ダウンロードして、ダブルクリックしていざインストール!


インストールの準備をしています....   がながい!!!!
準備が長い!

インストールも長い!!!

残り0%.... から終わるまでも長い!!!


30分くらいかかって無事SP1インストール完了。


ためしにマクロを動かしたら無事動きました。


 |  23:08  |  プログラム全般  |  トラックバック(0)  |  コメント(0)  |  Top↑

2008.04.16 (Wed)

参照されていないメソッドを探すマクロ

VisualStudio2005のC#.NETでコードを書いてるとき、
「どこからも参照されない変数」の場合はエラーなり警告で表示されてわかりやすい。
しかし「どこからも参照されないメソッド」は特に何も出ない。
設定で警告にしたり出来るんじゃないかと思ったけど出来ず、仕方がないので
VisualStudioマクロで探すことにしました。


Sub SearchAllFunctionReference()
    Dim textSelection As EnvDTE.TextSelection
    Dim codeElement As EnvDTE.CodeElement
    Dim codeElements As EnvDTE.CodeElements
    Dim classElement As EnvDTE.CodeElement
    Dim codeModel As EnvDTE.FileCodeModel = DTE.ActiveDocument.ProjectItem.FileCodeModel
    Dim i, j, k As Integer

    For i = 1 To codeModel.CodeElements.Count
        codeElement = codeModel.CodeElements.Item(i)
        If codeElement.Kind = vsCMElement.vsCMElementNamespace Then
            'クラスを取得
            Dim classElements = codeElement.Children()

            For j = 1 To codeElement.Children().Count
                If codeElement.Children().Item(j).Kind = vsCMElement.vsCMElementClass Then
                    classElement = codeElement.Children().Item(j)
                    For k = 1 To classElement.Children.Count
                        If classElement.Children().Item(k).Kind = vsCMElement.vsCMElementFunction Then
                            '参照の検索
                            Dim cnt As Integer
                            cnt = SearchReference(classElement.Children().Item(k))
                            If cnt <= 1 Then MsgBox(classElement.Children().Item(k).Name)
                        End If
                    Next
                End If
            Next
        End If
    Next

End Sub
Function SearchReference(ByVal codeElement As EnvDTE.CodeElement) As Integer
    Dim textSelection As EnvDTE.TextSelection
    Dim resultcount As Integer
    Dim rescaption As String

    Dim regex As New System.Text.RegularExpressions.Regex(" - [0-9]+")

    textSelection = DTE.ActiveDocument.Selection
    Try
        If Not (codeElement Is Nothing) Then
            textSelection.MoveToPoint(codeElement.GetStartPoint(vsCMPart.vsCMPartHeader))
            'エレメント名選択
            textSelection.FindText(codeElement.Name, vsFindOptions.vsFindOptionsMatchCase)
            'すべての参照の検索を実行
            DTE.ActiveDocument.Activate()
            DTE.ExecuteCommand("Edit.FindAllReferences")
            rescaption = DTE.Windows.Item(Constants.vsWindowKindFindSymbolResults).Caption

            '検索結果ウィンドウのタイトルから件数を取得
            resultcount = CType(regex.Match(rescaption).Value.Substring(3), Integer)

            Return resultcount

        End If
    Catch ex As Exception
    End Try

End Function

SearchAllFunctionReferenceを実行すると、アクティブなドキュメント(ソースファイル)内のメソッドを探し、全てのメソッドに対して「すべての参照を検索」を実行し参照数を取得、
参照数が1以下(どこからも参照されていない)の場合はダイアログでその関数名が表示される。

ほんとはシンボルの検索結果みたいに表示させたいけどよくわからないので・・・。
とりあえず今使いたくて調べつつ作ったマクロなのでちょっとややこしいです。

ほんとは参照されないゴミメソッドなんて出ないようなきれいな書き方すればいいんだけどね。
どうも何かとメソッドに分けたがるタイプなのでよくゴミが出る・・・


 |  17:46  |  プログラム全般  |  トラックバック(0)  |  コメント(0)  |  Top↑
 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。