2008-08-26 14 views
14

IISに2つの異なるASP.NETアプリケーションがあるとします。また、これら2つのアプリケーションで共有したいASCXコントロールもあります。異なるWebサイトアプリケーション間でASP.NET .ascxコントロールを共有する最も良い方法は?

2つのアプリケーションで同じコントロールの実装を使用できるように、「ユーザーコントロールライブラリ」を作成するにはどうすればよいですか?コードを複製する必要はありませんか?

コントロールには、HTML +コードの後ろにASCXがあります。


コンポジットコントロールは、ASCXファイルのHTML構文を使用してコントロールをスタイルするデザイナーと作業するため、難しいでしょう。

Tundey、ここではSVNを使用しています。あなたの提案を実装する方法の例がありますか?どのようにSVNはASP.NETコントロールを共有できますか?

ありがとうございます!

答えて

5

別々のプロジェクトでそれらを使用できるようにするには、.ASCXコントロールの代わりにコンポジットコントロールを作成する必要があります。

1

代わりに、ソースコントロールツールを使用して、Webアプリケーション間でASCXコントロールを「共有」することもできます。これにより、どちらのアプリケーションでもコントロールを変更し、ソースコントロールによって変更がWebアプリケーションに反映されるようになります。

0

ここではStarTeamを使用しています。複数のフォルダにオブジェクト(ファイル、変更要求、要件など)を「共有」することができます。 Subversion(SVN)にその機能があるかどうかは不明です。そうでない場合は、ここで使用できるもう1つの方法があります:コントロールの主要な場所から他のプロジェクトの場所に分岐点を作成します。ジャンクションは、Unixのシンボリックリンクと似ています。私はASP.Netでコントロールして気づいた最大の問題は、あなたが簡単にコントロールを構築しコントロールを使用して、両方のためのデザイナーのサポートを受けることができないということですhere

0

から、Windowsのジャンクションを作成するためのツールをダウンロードすることができますあなたがそれを構築したサイトで。私はこれを行うことができた唯一の方法は、コードビハインドのない.ascxコントロールを作成することです(つまり、すべてのサーバー側のコードはrunat = "server"属性を持つ.ascxファイルのスクリプトタグにあります) 。

でも、それでもなお.ascxファイルをコピーする必要があります。変更を行う必要がある場合は、ファイルを使用したすべての場所でファイルを更新する必要があります。だから、それがソース管理にあることを確認してください。

1

私は、最初にコントロールを構築することの容易さのいくつかを犠牲にしてこれを行うことができました。

コントロールライブラリDLLを生成するコントロールライブラリプロジェクトを作成することができます。欠点は、コードでのみコントロールを作成する必要があることです。私の最後のプロジェクトでは、これは問題ありませんでした。より複雑なコントロールでは、これが問題になる可能性があります。

はここでの例です:あなたはそのTextプロパティに入れ

<DefaultProperty("Text"), ToolboxData("<{0}:BreadCrumb runat=server />")> _ 
Public Class BreadCrumb 
    WebControl 

    <Bindable(True)> _ 
    Property Text() As String 
     '...' 
    End Property 

    Protected Overrides Sub RenderContents(output as HtmlTextWriter) 
     output.write(Text) 
    End Sub 

    Private Sub Page_Load(...) Handles MyBase.Load 
     ' Setup your breadcrumb and store the HTML output ' 
     ' in the Text property ' 
    End Sub 
End Class 

何がレンダリングされます。

ここで入力するコントロールは、使用する他のコントロールと同じように機能します。あなたのツールボックスにインポートして登録参照を作成し、ASPページに貼り付けてください。

15

Scott Guthrieは、ユーザーコントロールライブラリプロジェクトを設定する方法についていくつかのアドバイスをしてから、ビルド前イベントを使用してユーザーコントロールを複数のプロジェクトにコピーします。それは本当にうまくいく。

http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx

+0

私はこれらのソリューションのサーバーを検討しました。これは、既存のユーザーコントロールをWebサイト間で共有するのが最も簡単です。 –

0

私は最近、問題のあまりせずに、1つのWebアプリケーション(ASPX、マスターおよびASCX)からわずかファイルを参照するWebアプリケーション(合計約90)を行いました。それは私がMVP patternの大幅に変更されたバージョンを使用していると言っていました。複雑さを抑えるために多くのインターフェイスと規約がありました。同じ中間層と1つのサイトは、もう一方のサブセットでした。

ビッグ問題:あなたは多くの機能を失うよう

  1. は、マスターページ(ターンデザイナーやHTMLビューの書式で)参照されたファイルでは動作しません。ビルド前のステップとたくさんのsvn:ignoreエントリが私のハックでした。 CruiseControl.NETがビルド前のタスクを適切なフォルダで実行できるようにすることも苦痛でした。
  2. 共有ページ/コントロールは、余分な依存関係を引き起こさないように、ユーザーが触れて参照する内容を非常に意識している必要があります。
  3. 両方のサイトが展開のために一緒にロックされています。
  4. 私は今メンテナが私が作った混乱についての私のポケの小さな文書を読むように祈る必要があります。これまでのところ、私はASP.NETプロジェクトでは見たことがありません。

私は大変な時間をかけて仕事に就いていましたが、現在は両方のアプリが制作中です。私はそれをお勧めしますが、あなたがに興味を持ってスタートしている場合ではないでしょう:

ボタンの矢印を追加し、リンクとして追加言い、既存項目を追加し、いくつかのファイルを選択し、をクリックしてください。それ以外の独立したプロジェクト間でコンテンツの大きな塊(例えば:た.ascx/.aspxのあるフォルダ)を共有することになるとTundeyが言ったことに加えて

2

は、NTFSリンクシェル拡張は便利です。コードの場合は、VCSから別の作業コピーを作成することをお勧めします。

0

私はnormally.Thenは、ウェブサイトのプロパティを使用固定命名し、単一のページのアセンブリを変更するようsuggestion.WEは、ウェブサイトのプロジェクト内のユーザーコントロールを作成することで、倍数のアプリケーション間でユーザーコントロールを使用することができます持っていますユーザーコントロールdllを複数のアプリケーションに使用することができます。

関連する問題