- PR -

ASP.NETユーザーコントロールをプロジェクトを跨って使用したい

1
投稿者投稿内容
yoko
会議室デビュー日: 2004/05/12
投稿数: 2
投稿日時: 2004-05-12 22:33
お世話になります。

MS-VS.NETを使用して、言語をVBでWebページを作成しております。

この度、あるプロジェクト内にあるユーザーコントロールを他のプロジェクトで使用したいと考え、作成してみたのですが、エラーが発生しロードすることができませんでした。

ユーザーコントロールが格納されているプロジェクト(prjControls)、ユーザーコントロールを使用したいプロジェクト(ProjectA)のaspxファイルに
<%@ Register TagPrefix="uc1" TagName="AddressBox" Src="../prjControls/AddressBox.ascx" %>
と定義したところ、コンパイル後ページを表示したところ、下記エラーが発生いたしました。
【解析エラー】
説明 : この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソースファイルに変更を加えてください。
解析エラー メッセージ: 仮想パス '/prjControls/AddressBox.ascx' がほかのアプリケーションに割り当てられていますが、これは許可されていません。
ソース エラー:
行 1: <%@ Register TagPrefix="uc1" TagName="AddressBox" Src="../prjControls/AddressBox.ascx" %>

メッセージからユーザーコントロールではプロジェクトをまたぐことはできないのかとも思いましたが、各プロジェクトで共通して使用できるユーザーコントロールがあると非常に便利なため、使用できる方法はないか、または、類似の方法はないかと思い、ご質問させていただきました。

経緯:
 社内で共通して使用するような処理(例えば、顧客の検索ダイアログを表示するボタンとそのコード、名前、住所などを格納するコントロールを1セットにし、検索処理を共通化するユーザーコントロールなど)を各プロジェクトで同じファイルを使用できると、便利と思い作成してみました。今までは、同じプロジェクトに複数の独立したアプリケーションをフォルダで管理しておりましたが、数が増えてきたためコンパイルに時間がかかり始めたことと、変更していないアプリケーションも一緒にコンパイルしてしまうので、あまり状態としてはよくないのではないか、と考え分割作業をはじめたところです。
宜しくお願いいたします。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-13 08:57
 方法は2つあります。

1.カスタムサーバーコントロールを開発する
2.1つのアプリケーションにまとめる


 .ascxのファイルをよく見るとわかりますが、これの中に名前空間やらなんやらも持っているので、プロジェクト間で共有するのは難しいです。かといって、1の方法だとレンダラーを自分で書かないといけないので、PageLoadなどのイベントが発生する順序に気をつけないと、ちょっと難しいです。
[修正]
「プロジェクト間で共有」と書きましたが、「VSSの『共有』機能を使ってプロジェクト間でファイルを共有」の間違いです。
[/修正]

 それで、2の方法になるのですが、この方法でも、使い回しができるのは1つのソリューションです。ある顧客要件で使ったユーザーコントロールを、変更なしに、他の顧客要件に使うことはできません。何かしらの修正が必要になります。まったく修正をせずに、ということをお考えなら、カスタムサーバーコントロールか、プロジェクトファイルそのものを使い回すことを検討してください。


 で、方法ですが、マイクロソフトのサポート情報「[HOWTO] チーム開発用に複数のプロジェクトから ASP.NET アプリケーションを作成する方法」を参考に、1つのソリューションとして全体を構築します。ユーザーコントロールのあるディレクトリに気をつけてください。ページはそのページで表示されますが、ユーザコントロールは、ユーザコントロールを定義したディレクトリにあります。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-05-13 09:05 ]
yoko
会議室デビュー日: 2004/05/12
投稿数: 2
投稿日時: 2004-05-13 14:19
早速ありがとうございます。

やはりダメなのですね。名前空間はちょっと気になったので強制的に2つのプロジェクトを同じ名前空間にしてみたのですが(きっとあたりまえなのでしょうが)、ダメでしたので。

開発業務が受注開発ではなく社内システムの社内開発であるため、本当にまったく同じ処理をするコントロール群を使いまわせるので、できたら便利だと思ったのですが、逆にいうと私がやろうとしていることが一般的には特殊だということが、なんとなくわかりました。あまり特殊なことをするとかえってトラブルの元となりそうですので、ソースの使いまわしにとどめて、作業を行っていく & できそうなところはじっくりカスタムサーバコントロールで作成してみる、を行っていこうと思います。

ありがとうございました。
1

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