2009年10月26日月曜日

ApplicationDefinition 要素を指定できません。エラー

今日はこのエラーに2時間くらい悩まされました。。(汗
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets(294,9): error MC1002: ライブラリ プロジェクト ファイルは、ApplicationDefinition 要素を指定できません。
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets(294,9): error BG1003: プロジェクト ファイルに、無効なプロパティ値が含まれています。


で、見つけたのがこのQ&A

簡単に書くと、
1.WPFアプリをライブラリに変更した後にapp.xamlやapp.xaml.csが残っていたらおかしくなるぜー
のケースと
2.ファイルをコピペしたらビルドアクションがおかしくなるぜー。xamlファイルを右クリックしてビルドアクションプロパティをApplicationDefinitionからPageにかえな!
のパターンみたいです。

わたしの場合は2で、さらにpngのビルドアクションはResourceからPageに勝手に変わっていたので
全部Resourceに直しました。

2009年10月20日火曜日

Bindingが反映されなくてではまった話

TextBoxをおいてTextプロパティを適当にバインディングしたのに反映されない、
Source→Targetにも、逆にも、まったく反映されないということで今日結構な時間つまっていました。

まぁこれも解決してしまえば簡単な話で、
TextBoxにTemplate="{StaticResource ~~~
なんて余計なものを書いているのを忘れて、実際にはTemplateのなかのものが表示されている
(もちろんTemplateは適切に作れていない)というだけでした。

最近こういう間抜けな話だけのブログになりつつあるな。。

便利:メソッドスタブの作成

いや、もうたぶん常識なのでしょうけど。。
今までユニットテストを作成するとき、ずっと

1.対象のクラスVMをクラスだけ作成
2.VMをテストするVMTestクラスを作成
3.VMクラスに空のメソッドFix()を作成
4.VMTestクラスにFix()をテストするコードを記述
5.VMのFix()の中身を実装
6.メソッドごとに3~5を繰り返し

のようにやっていました。
結構空のスケルトンを作るためだけに
テスト対象の本物のクラスに戻るのがめんどくさかったんですけど、(3のところ)
テストクラスの方でメソッドを作ったときに





のように表示され、もちろんまだ存在しないFix()メソッドは警告の波線がついているわけですが、
ここでメソッド名の下の青い四角を押すと







のようになんと(VMクラスに移動することなく、)スタブをその場で作成することができます。
これでクラスを移動する回数がかなり減りました!

きっと常識なんだよね。。。

小さな発見でしたが、大きな効率化になりそうです♪

2009年10月18日日曜日

ClassInitialize()で実行時エラー

Windows7とVisual Studio2010に環境移行したので、前回の日記から間が開きました。

テスト環境もNUnitからVS2010のUnitTestFrameworkに移行しようとしました。

で、VSで単体テストクラスのスケルトンをはいて実行したところ、

メソッド (プロジェクト名).(クラス名).MyClassInitialize は不適切なシグネチャを含んでいます。パラメーター 1 は型 Microsoft.VisualStudio.TestTools.UnitTesting.TestContext でなければなりません。

と。
コードを何度見直しても間違いはない。というかスケルトンからシグネチャは変更していない。

で、ネットで検索したらこういう記事が。
http://social.msdn.microsoft.com/Forums/en-CA/vcsharp2008prerelease/thread/33febac0-4073-4d49-8b68-db0ca1255cd2

私の場合逆にVisual Studio 10.0フォルダのdllに変更したら直ったようなのですが。

ちなみに対象のフレームワークが.Net Framework 3.5用(←4.0ではなくて)のプロジェクトをさわっていたので、
そのためにUnitTestFrameworkのdllも古いのが読まれてしまったのかもしれません。。

2009年10月6日火曜日

WPF UIフレームワークのクラス階層図

初歩的なことなのでないのかもしれないけど、
UIフレームワークの全体を把握しやすい図があまりなかった気がする。

この下の方のやつが一目でわかりやすいかなと思う。
クラス階層図

2009年10月2日金曜日

SortDescriptionのXAML記述でひっかかった話

XAMLで書いてたら名前空間ComponentModelにSortDescriptionなんてないよ!ってエラーが出てハマッた。
XAMLで
xmlns:compModel="clr-namespace:System.ComponentModel;assembly=System"
と宣言していたのが間違いで、この場合は
xmlns:compModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
でした。アセンブリごとに定義しないといけないのね。。
普段あんまり意識してなかったので気づきませんでした。。

2009年10月1日木曜日

NUnitのException

ExceptionはAssert.CatchやAssert.Throwsなどで
Assert.Catch<InvalidOperationException>(()=>{a.func();}, "must throw exception");
のような形でテストできるみたい。
でもNUnitについてくるGUI使うときはこれでもいいけど、
前の日記のようにVisual Studioでやっていると、そこで実行が終わってしまう。

これをやろうとするとやっぱり
try {
   a.func();
   Assert.Fail("must throw exception");
} catch (InvalidOperationException) {
   //OK
}
のようにしないといけないのかな?