- PR -

ASP.NET2.0でのコードベースの記述について

投稿者投稿内容
へらぶな
会議室デビュー日: 2009/02/04
投稿数: 6
投稿日時: 2009-02-04 19:59
お世話になります。

お伺いしたいことは、
「ASP.NET2.0において、Web.configにコードベースの記述をした場合
 正常に動作するのか。また記述方法はVB.NETと異なるのか」です。

参照元の記事、参照元が参照している記事をもとに
web.configにコードベースの記述をしたのですが、
インスタンス生成時にDLLが見つからないとのエラーメッセージが
表示されます。

binフォルダにDLLが存在すれば正常に動作することは確認済みです。

結局ASP.NET2.0でのコードベースの記述はできないのでしょうか?
ご存知の方が見えたらご返答をお願いいたします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-04 20:02
> binフォルダにDLLが存在すれば正常に動作することは確認済みです。

ASP.NETではdllはbinフォルダに存在していることが前提条件となります。
あとはGACに登録してサーバ内全体で共有できるようにするか、かな。

binフォルダに置いたのでいけないのはなぜでしょう?
へらぶな
会議室デビュー日: 2009/02/04
投稿数: 6
投稿日時: 2009-02-04 20:23
どっとねっとふぁん様 返答ありがとうございます。

binにおいてはいけないわけではないのですが、
最近VB6.0プログラマからASP.NETプログラマになったばかりでして、
いろいろ試してみている中でコードベースという記事を見つけ、
それがASP.NET2.0でもできるのかと思ったしだいです。

>ASP.NETではdllはbinフォルダに存在していることが前提条件となります。
浅学で申し訳ないのですが、この内容が詳しく説明されている文献を
ご存知でしたら、教えていただけると幸いです。
へらぶな
会議室デビュー日: 2009/02/04
投稿数: 6
投稿日時: 2009-02-08 12:52
お世話になります。

とりあえず現在自分で調査してみたことのまとめなのですが、
MSDNに以下の記述があったので引用します。

引用:

「アプリケーション専用のアセンブリ」とは、1 つのアプリケーションだけが認識できるアセンブリのことです。.NET Framework では、他のアプリケーションによるシステムへの変更に影響されないアプリケーションを構築しやすくなっているため、私たちは .NET アプリケーションに関しては専用のアセンブリが広く使用されることを期待しています。
(中略)
アプリケーション専用のアセンブリは、それを使うアプリケーションのディレクトリ構造の中に配置します。その場所はアプリケーション ディレクトリの直下であっても、サブディレクトリの中であっても構いません。



これをもとにASP.NETでのDLLの配置をまとめてみると、

GACへの配置:多くのアプリケーションで共有する場合に有効。
→今回はひとつのアプリケーションでのみ使用するため、必要性なし。

binへの配置:DLLのロードに失敗するとアプリケーションが起動しない。
→バージョンの違うDLLを配置することはないため、とりあえず問題なし。

CodeBaseの指定:「サブディレクトリの中であっても構いません。」と引用の中に
記述されているためできるのであろうが、Windowsアプリケーションとは記述が違う?

結局ASP.NET2.0では<codebase>要素でのDLL配置はできないのでしょうか?
再度の質問になってしまいますが、ご存知の方見えたら回答お願いいたします。




どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-09 10:27
コードベースの説明は次のようになってますか。。。

> その場所はアプリケーション ディレクトリの直下であっても、サブディレクトリの中であっても構いません。

アプリケーションディレクトリのサブディレクトリ内、ということになると、ASP.NETの場合、実行時のアプリケーションディレクトリは元のアプリケーションを置いた場所とは異なるはずです。
ASP.NETは実行時にはコンパイルしたdllが別の場所に作成されて実行されているはずで、このため、実行している間でもソースに触ったりすることができます。
まぁ、ソースを修正して保存した時点で再度コンパイルが動くはずですが。

ASP.NETでは、このアプリケーションディレクトリというのが実行時のdllのある場所とかになっているかもしれません。
そのためにうまく動かないのかもしれませんね。

ちょっと想像だけで書いているので、本当にそのせいかわかりませんが。
ugaya
会議室デビュー日: 2006/08/03
投稿数: 18
投稿日時: 2009-02-10 18:01
codebase指定をしてシングルページなアセンブリを思いっきり外に出してみましたが、正常に動作しました。
ASP.NETの実行ユーザーのアクセス権がcodebaseの指定先に無いだけだったりしませんか?

IIS5ならユーザーASP.NET。
IIS6ならデフォルトはNETWORK SERVICEです。


アセンブリロードについて
http://msdn.microsoft.com/ja-jp/library/15hyw9x3(VS.80).aspx

ちなみにアプリケーションベースのディレクトリやら何やらは
AppDomain.CurrentDomain.SetupInformation
で見れます。

IISに配置した場合、実際の実行場所はAppDomain.CurrentDomain.SetupInformation.ShadowCopyDirectoriesですが
ApplicationBaseは配置した場所と変わってないようです。

[ メッセージ編集済み 編集者: ugaya 編集日時 2009-02-12 11:47 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-10 18:55
ああ、アクセス権限でしたか。
やっぱ動かしもせずに勘で話をするのはいけませんねm(_ _)m
へらぶな
会議室デビュー日: 2009/02/04
投稿数: 6
投稿日時: 2009-02-10 20:35
どっとねっとふぁん様
ugaya様

貴重な情報ありがとうございます。

そうかアクセス権か!!

ちなみに今回リリース予定のアプリのフォルダ構成は以下の通りで、

アプリケーションフォルダ
  binフォルダ
    アセンブリ.dll
    その他構成ファイル
  Excelテンプレートフォルダ
    テンプレート.xls
  (DLLフォルダ)←ここの構成が???
  もろもろ.aspx
  Web.config

同じように配置したEXCELテンプレートファイルには
問題なくアクセスできてたんで、
その辺何も気にしてませんでした。。。
テンプレートの使用とDLLのロードとでは、何か違うのか???

すいません、今これを家で見ててテストできる環境がないため、
返答は木曜日以降になります。
折角有益な情報をいただいたのに、ごめんなさい。

スキルアップ/キャリアアップ(JOB@IT)