Web サイトの UserControls を再利用可能なサーバー コントロールに変換し、宣言型コードを使用する機能を維持するという実証済みの手法により、ASCX コード内で宣言されたNullReferenceException
任意のコントロールを参照できます。
同じプロジェクトから ASCX を呼び出す場合、この問題は発生しません。
アイデアは、コントロールの宣言型コードのオンデマンド コンパイルが行われるということです (プリコンパイルされた Web サイト)。aspnet_merge を適用した後、厄介な名前のアセンブリは通常の名前を受け取りますが、この最初のステップがうまくいかない場合...私がしたこと、要するに:
- Web サイトを作成し、ユーザー コントロールを追加し、リテラルを追加して、そのテキストをコード ビハインドに設定します。試して。
- 固定の名前付きアセンブリにコンパイル、更新不可
- 出力 DLL を取得し、それらを別の webite プロジェクトに追加してテストします。
最後のステップでは、宣言によって初期化されたコントロールの任意のプロパティにそのコントロール内 (つまり、私の場合は Page_Load 内) からアクセスしようとすると、null 参照例外が発生します。
PS: Scott Guthrieが同じテクニックを説明しています。