VS2008でASP.NETプロジェクトを作ると落ちる

image

イベントビューアーで調べると・・・

障害が発生しているアプリケーション devenv.exe、
バージョン 9.0.21022.8、タイム スタンプ 0x47317b3d、
障害が発生しているモジュール mswebprj.dll、
バージョン 9.0.21022.8、
タイム スタンプ 0x4731806d、例外コード 0xc0000005、障害オフセット 0x00018fba、
プロセス ID 0x179c、アプリケーションの開始時刻 0x01c9a468c04aeb50。

ふむううう。

イベントビューアーで調べたら、直前に警告で

テンプレート (C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Windows\1041\WPFBrowserApplication.zip)、ファイル (csWPFBrowserApplication.vstemplate) にエラーがあります。不明な要素 (EnableEditOfLocationField) です。解析で修復を試行します。

と出ている。ファイルがおかしくなっているせいか?

くそっ、C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Windows\1041 以下を消して、再インストールしてみる。

そうしたら、また修復も、アンインストールもできない罠。orz

image

Visual Studio 2008 の修復インストール、アンインストールができない

Visual Studio 2008の調子が悪く、ASP.NETの開発ができなくなってしまった。特に何もしていないのに突然の症状。原因不明。しかたないので、修復セットアップしようとしたら、セットアップもできなくなっている。

image

アンインストールもできない。困ったと思っていたら、

もりさんのページで、

Visual Studio 2008 自動アンインストールツールが公開されています。

が紹介されていた。

Visual Studio 2008 をアンインストールする

http://msdn.microsoft.com/ja-jp/vstudio/bb968856.aspx

無事安易ストール完了。

さて、インストールしますか。

・・・1時間後、インストール無事終了。起動してみると、ブルースクリーンでVista 落ちた。

再起動後、WebApplication を作ってみただけで、

image

ということで、なんかすごくおかしくなっている。

WinForm は問題なくプロジェクトの作成、実行ができる。

IISがらみか?

RDF を LINQ で読む

string gooRankingUrl = "http://ranking.goo.ne.jp/rss/keyword/keyrank_all1/index.rdf";
XDocument feedXML = XDocument.Load(gooRankingUrl);

XNamespace d = "http://purl.org/rss/1.0/";
XNamespace dc = "http://purl.org/dc/elements/1.1/";

var res = from item in feedXML.Descendants(d + "item")
          select new
          {
              Title = item.Element(d + "title").Value,
              Link = item.Element(d + "link").Value,
              PubDate = (item.Element(dc + "date").Value ?? ""),
              Publisher = (item.Element(dc + "publisher").Value ?? ""),
              Rank = (item.Element(dc + "rank").Value ?? ""),
              Point = (item.Element(dc + "point").Value ?? ""),
              Arrow = (item.Element(dc + "arrow").Value ?? ""),
              Description = (item.Element(d + "description").Value ?? ""),
              Guid = item.Element(d + "link").Value
          };

GridView1.DataSource = res;
GridView1.DataBind();

結果は、こんな感じ。image

ASP.NET ルーティング 続き on 2003 Server

この前の ASP.NET ルーティングは、VS2008 + Vista ASP.NET開発サーバーであっさり動きました。

ところが、2003 Server で試してみると動かない。

???ということで調べてみると、

IIS の Web サイトのプロパティ → ホームディレクトリ タブ → 構成ボタンを押し下げます。

image

すると、アプリケーションの構成ダイアログが表示されます。

image 

ここで、ワイルドカード アプリケーション マップで、挿入ボンタンを押す。

image

c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll を指定し、

ファイルの存在を確認する チェックボックスを外す。

これにより該当しないファイル拡張子の場合、aspnet_isapi.dll で、ルーティングが追加されていないかどうか確認するようになりました。

Culminis : 1/22/2009 Announcing the APAC Regional Board

シアトルでルームシェアしたインド人の Ashwin からのチャットで、次のお知らせをもらった。

http://thevoice.culminis.com/APAC/Lists/Posts/Post.aspx?ID=4

北端さんが DAL (Director-at-Large): で日本代表として参加されているとのこと。

プロファイルは

http://new.culminisconnections.com/BOD/APAC.aspx?PageView=Shared

ASP.NET ルーティング

MSDN を読んでいたら、ASP.NET ルーティングということで、URLの書き換え方法が載っていた。

http://msdn.microsoft.com/ja-jp/library/cc668201.aspx

昔調べた方法から、IIS7 対応もあり、だいぶ変わっているようなので調べてみた。そうしたら、ええ~~、こんな簡単にできようになっちゃたんだー!と感動して、ためしに動かしてみようとしました。すると、CategoryRouteHandler がありませんと怒られる。そりゃそうだ、どこにもそんなコードがない。あれ??ということで調べてみると、どっとねっとふぁんBlog の小野さんが

ASP.NET ルーティングを実装する

で丁寧に解説してあった。さすが師匠wと感動する一方、やっぱりハンドラ書かないといけないのね。orz

LinqDataSource によるメモリ内コレクションのデータへの接続

http://msdn.microsoft.com/ja-jp/library/bb547113.aspx

Default.aspx.cs にMoviewLibraryクラスを追加。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace LinqDataSource
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }

    public class MovieLibrary
    {
        string[] _availableGenres = { "Comedy", "Drama", "Romance" };

        public MovieLibrary()
        {
        }

        public string[] AvailableGenres
        {
            get
            {
                return _availableGenres;
            }
        }
    }
}

GridViewを追加。新しいデータソースを選択。

image

LINQを選択。

image

データソースの構成ダイアログで、MoviewLibraryを選択。

image

データの選択の構成ダイアログで、テーブル、Select, GroupBy, Where, OrderBy を指定可能。

image

実行すればこのとおり。

image

生成されたWPFコードは、

<asp:GridView ID="GridView1" runat="server" DataSourceID="LinqDataSource1">
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
    ContextTypeName="LinqDataSource.MovieLibrary" TableName="AvailableGenres">
</asp:LinqDataSource>

列名までしっかり処理されている。もう少し複雑なテーブルで試してみると、これがずいぶん便利だということに気が付く。

Linqでファイルを作成日順でソート

サービス参照の追加(VS2008) と Web参照の追加(VS2005)

VS2005 では、サービス参照の追加から、次のようなサービスを追加することができる。このダイアログの一番下に、参照設定ボタンがある。

image 

この参照設定ボタンをクリックすると、次のようなサービス参照設定の詳細を指定することができる。このダイアログの一番下に、互換性ということで、Web 参照の追加ボタンがある。.NET Framework 2.0 web サービステクノロジーに基づいたコードを生成することができる。

image

Web 参照の追加ボタンを押すと、昔懐かしいWeb 参照ダイアログが表示される。

image

.NET 2.0とそれ以降では、生成されるコードが若干違ってくるので、注意が必要。

XAML Data Binding

Expression Blend で TextBlockのプロパティ→共通プロパティ→ Text の右側の小さな四角をクリックimageすると、次のようなメニューが表示されるので、データバインドを選択する。imageデータバインドの作成ダイアログが表示されるので、要素プロパティタブ→シーン要素から textBox1を選択、プロパティよりTextを選択し、完了。image生成されるXAMLコード<TextBox Name=”textBox1″ VerticalAlignment=”Top” />
<TextBlock x:Name=”textBlock1″ Text=”{Binding Path=Text, ElementName=textBox1, Mode=Default}”/>Path を指定しない場合、既定でオブジェクト全体にバインドされます。Mode は、OneWay, TwoWay, OneTime, OneWayToSource, DefaultTwoWay
ソース プロパティまたはターゲット プロパティのどちらか一方が変更されると、もう一方も自動的に更新されます。この型のバインディングは、編集可能なフォームや完全対話型の UI シナリオに適しています。OneWay
バインディング ソース (ソース) の変更時にバインディング ターゲット (ターゲット) プロパティを更新します。この型のバインディングは、バインドされているコントロールが暗黙的な読み取り専用の場合に適しています。たとえば、株価情報などのソースにバインドする場合です。また、ターゲット プロパティには、データ バインドされたテーブルの背景色などの変更用コントロール インターフェイスがない可能性もあります。ターゲット プロパティの変更を監視する必要がない場合は、OneWay バインディング モードを使うことにより、TwoWay バインディング モードのオーバーヘッドを回避できます。OneTime
アプリケーションの起動時またはデータ コンテキストの変更時にバインディング ターゲットを更新します。この型のバインディングは、現在の状態のスナップショットを使用した方がよい場合や、データが完全に静的である場合に適しています。また、ソース プロパティの値を使用してターゲット プロパティを初期化するときにデータ コンテキストが事前にわからない場合にも、この型のバインディングは便利です。基本的に、この型のバインディングは、ソース値が変わらない場合にパフォーマンスを向上させる OneWay バインディングを簡易化したものです。OneWayToSource
ターゲット プロパティが変更されると、ソース プロパティを更新します。Default
バインディング ターゲットの既定の Mode 値を使用します。ただし、既定値は、各依存関係プロパティによって異なります。一般に、ユーザーが編集できる、テキスト ボックスやチェック ボックスなどのコントロール プロパティは既定で双方向のバインディングであり、それ以外のほとんどのプロパティは既定で一方向のバインドになります。依存関係プロパティが既定で一方向と双方向のいずれであるかをプログラムにより決定する 1 つの方法は、GetMetadata を使用してプロパティのプロパティ メタデータを取得してから、BindsTwoWayByDefault プロパティのブール値を確認することです。TwoWay時のソースの更新時期(UpdateSourceTrigger)は、Default, Explicit, LostFocus, PropertyChanged<TextBox Name=”textBox1″ Text=”{Binding Path=Text, ElementName=textBox2, Mode=TwoWay, UpdateSourceTrigger=Default}”/>
<TextBox Name=”textBox2″ VerticalAlignment=”Top” />