2008年11月24日月曜日

Dynamic Data 参考リンク

ただいま勉強中。
参考リンクをメモ。

FieldTemplateの応用編。テンプレートの中でさらにGridViewを使ったりと実用的な例が多い。


ともにUIHintの属性パラメータをテンプレートの中で活用するサンプル。

2008年10月21日火曜日

Crack.NET

昨日の記事に続いて、便利なデバッグツールをもう一つ。


作者の Josh Smith さんは前回のMoleの作者の一人でもあります。

名前的にもヤバそうですが。コイツは強力。
Moleとは異なりスタンドアロンなツールなので、Visual Studioやデバッグ実行の必要はなし。
外部から起動中の.NetプロセスにアタッチできるのはSnoopなんかに近いですが、
Crack.NETではそのプロセス上でなんと任意のコードを実行できてしまいます。
ちょっと試してみましょう。

まずはインストールの方法から。

上記リンクからダウンロードできます。
サイトの制限上、拡張子.DOCになってるので、これを.ZIPに変更して解凍。
Crack.NETはIronPythonライブラリを使用するので、IronPythonをインストールしていなければ、解凍して出てくるIronPython.dll と IronMath.dll を GAC にコピーします。あとは、EXEを実行するだけ。
 

Crack.NETはWinForms と WPF に対してクラックできますが、今回はWinFormsを外部から弄ってみましょう。
 
こんな感じのGridViewが貼ってるだけの単純なWinFormを実行して、Crack.Netからプロセスを選択。
 
 
 
 
 
 
 

 
 
 
 
 
 
 
これがメイン画面。
MemoryExplorerから各クラスのスタティックメンバを参照できます。
起動中のFormを選択するために、
System.Windows.Forms.Application.OpenForms[0]と順に辿って、Scriptoriumをクリック。
 
 
 
 
これがPythonスクリプトの実行画面。

INPUT=System.WindowsFormsApplication1.Form1 (object) とあります。

これはさっきのMemoryExplorerで選択しているオブジェクトに対して、INPUT変数を通してアクセスできるってこと。"Insert Starter Script"を押すと、参照の追加や必要なimportなんかのスクリプトを自動的に用意してくれてとっても便利です。

では、Pythonコードでグリッドに1行追加してみましょう。
clr.AddReferenceByPartialName("WindowsFormsApplication1")
from WindowsFormsApplication1 import *
form = INPUT
horse = Horse()
horse.Name='ポルトフィーノ'
horse.Father='クロフネ'
form.Data.Add(horse)
grid = form.Controls['dataGridView1']
grid.DataSource = form.Data
grid.Refresh()


スタータースクリプトにこんな感じのを追加して、Execute Script(F5)。




















簡単にクラックできちゃいました!!

Pythonを駆使すればかなり強力なデバッグが実現できますね。
もちろん、強力を通り越して凶悪な結果にも繋がりかねないので、使い方には十分注意が必要ですが。


Mole for Visual Studio

最近見つけた.Net向けのデバッグツールをいくつか紹介してみます。

今日はその一つ目、Mole For Visual Studio。

CodeProjectからダウンロードできます。

この Mole は、VS2005/2008上で動作するデバッグ用のオブジェクト ビジュアライザです。
落としたDLLをVSのビジュアライザディレクトリに放り込むと、ブレークポイントで停止したタイミングでMoleを起動できるようになります。












Visualizerが対応するオブジェクトは虫眼鏡アイコンが出るので、ここからドロップダウンしてMoleを選択すると、



















こんな感じ。
左側のペインのオブジェクトツリーから対象オブジェクトを選択して、右側のペインでいろいろできます。

主な特徴としては、
  • すべてのプロパティを参照できる
  • プロパティ値のエディットが可能
  • よく参照するプロパティのお気に入り指定
  • 選択エレメントの描画イメージを確認
  • プロパティ検索
  • 状態の比較
など色々あるけど、特にエディット機能は強力。
Color や Font をはじめとしてタイプごとにエディタがちゃんと起動するし、変更ログをとれたりします。

さらに面白いのが、ウォッチウインドウ上で任意のオブジェクトをWeakReferenceでラップすることで、UIツリー以外のオブジェクトツリーも覗くことができる点。









対応プロジェクトも WinForms, WPF, ASP.NET, WCF, WF と多いし、一度使うと手放せなくなるツールだと思いますよ~

明日?はさらに強力なツールを取り上げます。

2008年10月20日月曜日

Silverlight2からADO.NET DataService

Silverlight2からADO.NET DataServiceへ接続しようとしてて気づいた点。
現状(RC0)ではSilverlightからクロスドメインのADO.NET DataServiceへの接続はサポートされないようですね。

既存のDataServiceへ接続しようとすると、ポリシーファイル置いても何してもダメだったけど、
SilverlightをホストしてるWebサイト上にDataServiceを追加したら何も問題なし。

探してたらMSDNフォーラムにこんなのがありました。

(一部引用)
There is no support for accessing cross-domain ADO.NET Data Services using the Silverlight client library in this  release.
The networking stack provided by Silverlight allows you to access cross domain data services. so, if you dont use the DataServiceContext and  instead use HttpWebRequest to access the data service then you will have cross domain access to the data service.
Cross-domain access to ADO.NET Data Services with the Silverlight client library is not allowed in SL2 RC0/RTM bits.

DataServiceContextを使わずにHttpWebRequestでならアクセスできるみたいですが・・・

まあ現状では、DataServiceの配置をSilverlightと同ドメインにするべし。
でもデバッグで開発サーバー使っていると、
別プロジェクトでクロスドメインになっちゃうから面倒くさいですね。。。