WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

xsd ファイルの場所

by WebSurfer 2010年9月6日 13:30

ASP.NET ベースの Web アプリを作成する際、xsd ファイル(型付 DataSet + TableAtadter の定義ファイル)はどこに置いたらいいかという話です。

xsd ファイルの場所

そんなことは知っていると言われそうですね。でも、App_Code フォルダの中に置くとダメなケースがあるということはご存知でしょうか?

(1) Web サイトプロジェクト

App_Code フォルダの中以外に選択肢はありません。上の画像の左側がそれです。

これは型付 DataSet + TableAtadter に限った話ではなく、ユーザー定義のクラスやメソッドをアプリケーションのどこからでも参照できるようにするには、App_Code フォルダに置くしか方法はありません。

(2) Web アプリケーションプロジェクト

少なくとも、VB を開発言語に使っている場合は、App_Code フォルダに置くのは NG です。

App_Code の中に xsd ファイルを作ると、自動生成された Xxx.Designer.vb のメソッド名が衝突を起こし、以下のようなエラーが出ます。

"コンパイル エラー メッセージ: BC30269: 'Public Sub New()' には同じ署名で複数の定義が存在します。"

ただし、上記は VB の時だけで、C# の場合は App_Code の下に xsd ファイルを作っても問題なしでした。

自動生成された Xxx.Designer.vb, Xxx.Designer.cs のコードを比べてみると、以下の違いがありました。

  1. C# の場合は全体が名前空間(アプリケーション名.App_Code)で囲まれているが、VB の場合はそれがない。
  2. C# には VB で名前の衝突を起こした New() というメソッドがない。

アプリケーションルート直下に xsd ファイルを作れば問題なしでした。見た限り自動生成されたコードはどちらも同じなんですが。

何故ルート直下に xsd ファイルを作ると OK で、App_Code フォルダ下では NG なのか理由は調べ切れていませんが、Web アプリケーションプロジェクトでそういう制約があるようです。

というわけで、Web アプリケーションプロジェクトでは、xsd ファイルはアプリケーションルート直下に置くのがよさそうです。上の画像の右側がそれです。

------------- 2011/12/3 追記 -------------

Web アプリケーションプロジェクトで、App_Code にクラスファイルを置くと、Visual Studio と ASP.NET による二重コンパイルの問題があるそうです。なので、特にその必要がない限り、Web アプリケーションプロジェクトで App_Code フォルダを設けるのは避けた方がよさそうです。詳しくは以下のページを参照してください。

App_Code folder doesn't work with Web Application Projects (WAPs)

「特にその必要がない限り」と書きましたが、ASP.NET MVC3 の Razor で @helper メソッドを切り出して利用する場合は、現在のところ App_Code フォルダを使用せざるを得ないようです。詳しくは以下のページを参照してください。

ASP.NET MVC 3 and the @helper syntax within Razor

Tags: , ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年3月  >>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

View posts in large calendar