About smegy things


by smeg_head
カレンダー
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリ:dotnet( 13 )

BuildファイルにSystem.dllなどのシステムのDLL参照が入ります。
Windows95系とNT系でシステムディレクトリ名のため、WindowsXPで動くbuildファイルが、Windows2kでは動かないということが起こります。そこで、以下のように環境変数を参照してプロパティを作成し対応できました。

・・・
<property name="sdk.dir"
value="${environment::get-variable('WINDIR')}\Microsoft.NET\Framework\v1.1.4322"/>
・・・
<references>
<include asis="true" name="${sdk.dir}\System.dll"/>
・・・

[PR]
by smeg_head | 2005-11-19 15:53 | dotnet

NAnt

NAntという、antのdotnet版を試してみた。
最初から、ビルドファイルを書くのが面倒で、自動化してくれるサイトを見つけた。
NAnt BuildFile Builder
http://dotnet.leadit.be/buildfilebuilder/default.aspx

以外と簡単に、NAntを実行するところまではいったが、自動生成したビルドファイルが悪いような警告が出ていた。
includes タグじゃなくて、includeタグを使えというようなことだったので、単純に変更して実行すると、ビルド前の警告はでなくなった。
こんどはoptionstrictってなんだというメッセージが出てたので、cscタグの属性を消す。消したのは以下。
optionstrict="false" rootnamespace="Common" removeintchecks="false"
BUILD SUCCEEDED
ビルド成功!かと思い、出力ディレクトリを見ると、Common があった。拡張子がないファイルがそこにあった。
cscタグのoutput属性を拡張子付きに変更したらできたようです。

下のエラーはとりあえず無視してます。

[loadtasks] Failure scanning \"C:\usr\local\nant\bin\NAnt.NUnit1Tasks.dll\" for extensions. アセンブリの 1 つ以上の型を読み込めませんでした。


WebアプリケーションもNAntでビルドしたバイナリで動きました。

考えてみれば、プロジェクトファイルからNAntのビルドファイルを作るのは大変なことじゃないよな。JavaScriptで作ればいいのか。
[PR]
by smeg_head | 2005-11-06 21:55 | dotnet

pager機能

asp.netで、datagridコントロールについているようなページインデックスの機能をRepeaterコントロールに付加してみました。下のサイトを参考に。
ページング処理を行う汎用的なコントロールの作成

感想としては、「eventの仕組みって強力だな。」でした。
あと、上のサイトのコードは、デザインパターンを色々と使っていたのでその意味でも参考になった。実際自分のコードでは、自分で理解できるように拡張性を考えないで実装しましたが。。。

他の局面でもeventを駆使すれば、無駄なコーディングをかなり減らせると感じた。
[PR]
by smeg_head | 2005-11-05 17:46 | dotnet

ASP.NETでのJavaScript

JavaScriptでチェック処理などを行なう手前、
JavaScriptから、Repeater内のコントロールにアクセスする
必要がある。
Repeater内の自動生成されるコントロールのidは、
repeaterのidと行番号とコントロールのidを__ctlとかで
連結したものになっていました。

本当は、__ctlとかに依存しない形でアクセスできるの
が一番よいんだけど、以下みたいな関数を使うことで、
悪い依存を関数内にとじこめて、よしとしてしまいました。


// repeater内のbuttonのidが指定の形式のボタン配列を返却
// 最初のfromのみを対象とする。
function getButtonsById(repeaterId, buttonId) {
 prefix = repeaterId + "__ctl";
 sufix = "_" + buttonId;
 var buttons = new Array();
 var i, n;
 for (i = 0, n = 0; i < document.forms[0].elements.length; i++) {
  var c = document.forms[0].elements[i];
  if (c.type == "button" || c.type == "submit") {
   if (c.id.substring(0, prefix.length) == prefix &&
   c.id.substring(c.id.length - sufix.length, c.id.length) == sufix) {
    buttons[n++] = c;
   }
  }
 }
 return buttons;
}


documentは本当は半角です。半角だとblogに怒られましたので;;
この問題の正しい解決方法ってどんな方法なんでしょう?
[PR]
by smeg_head | 2005-10-16 19:51 | dotnet
ASP.NET Webアプリケーションなら、Web参照のプロパティのURLの動作にダイナミックを指定すると、Web.configのappSettingsに要素が追加されるので、以下のように修正すれば、リコンパイルが不要。

<appSettings>
<add key="Webref.UserManager" value="http://本番用/Webref/UserManager.asmx"/>
</appSettings>

[PR]
by smeg_head | 2005-10-07 23:10 | dotnet
だいぶ、間が空いてしまった。

昨日まで発生していた、RepeaterのOnItemCommandイベントが
発生しなくなって困った。LinkButtonのイベントは発生するのに。

詳しい現象はこんなかんじ。

<asp:repeater id="repeater1" runat="server" OnItemCommand="repeater1_ItemCommand">

<asp:Button CommandName="edit" Text="編集" Runat="server" ID="btnEdit" />
<asp:LinkButton CommandName="detail" id="link1" runat="server" Text="">


というaspxファイルがあって、デザイン上では、イベントを設定してません。
repeaterのOnItemCommand属性でイベント発生時に実行するメソッドを指定し
てます。

Page_OnLoadで、セッションに保存していたDataSourceを再設定してしまってい
ました。リクエストが発生したとき、クリックのイベントより先にDataSerce
が再設定される。よくわからないけどこれが原因みたい。

repeater1.DataSource = Session["dataview"];
repeater1.DataBind();


この状態だと、Buttonのイベントは発生しない。LinkButtonのイベントは発生
する。
どうも附におちないけど、むやみに、DataSourceの設定とDataBindするなって
ことか?

リクエストが発生したとき、DataSourceが破棄されていたので、セッションに
保存するようにしてたんだけど。
[PR]
by smeg_head | 2005-10-01 16:54 | dotnet
覚書。
http://www.atmarkit.co.jp/fdotnet/dotnettips/111custcfg/custcfg.html
[PR]
by smeg_head | 2005-09-22 01:01 | dotnet
基本でつまずいた。

More
[PR]
by smeg_head | 2005-09-21 23:13 | dotnet

設計

設計って技術を知らないで進めると、痛い目にあう。
至極あたりまえだけど、またやってしまった。

More
[PR]
by smeg_head | 2005-09-18 00:53 | dotnet

実行中のメソッド取得

実行中のメソッド名を取得するには、以下のようにする。

System.Reflection.MethodBase.GetCurrentMethod().Name

これにより、ログ出力などのコードが定型として書けるので、いちいち該当メソッドのメソッド名の箇所を変更しなくてよくなる。
[PR]
by smeg_head | 2005-09-11 02:30 | dotnet