1

この問題にはおそらく非常に簡単な解決策がありますが、私はSharepointをまったく知らず、これに関する知恵への道をグーグルで検索できないように見えるので、おそらくあなたの1人が私を正しい方向に導くことができます.

背景: 現在、私は Web ソリューションの一部が SharePoint で構成されているプロジェクトに取り組んでおり、Sharepoint の経験はまったくありません。最近、ソリューションの SharePoint ページの 1 つに (Web) ユーザー コントロールを追加するという、非常に単純なタスクのように見える作業に苦労しています。このタスクには 2 つの重要な要件があります。

  • ユーザー コントロールとコード ビハインドは別のアセンブリに配置して構成する必要があります。
  • そのアセンブリに署名する必要があります

ユーザー コントロール アセンブリは、実際には Default.aspx を使用した別の ASP.NET Web アプリケーションであるため、Cassini を使用してモックアップを使用してユーザー コントロールをデバッグできます。Default.aspx を使用してデバッグすると、正常に動作し、ユーザー コントロールが表示され、意図したとおりに使用できます。

web.config に次の行があります。

<SafeControls>
[..]
<SafeControl Assembly="MyMainNamespace.SubNamespace.SelectorPopup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7fa78676161515a2" Namespace="MyMainNamespace.SubNamespace.SelectorPopup" TypeName=" *" Safe=" True " />
[..]
</SafeControl>

そして、Sharepointページに次のものを置きました:

<% @Register TagPrefix= "Selector" Namespace="MyMainNamespace.SubNamespace.SelectorPopup" Assembly="MyMainNamespace.SubNamespace.SelectorPopup" %>
[..]
<Selector:SelectorBoxControl runat="server" SelectorType="ContentArea" ></ Selector: SelectorBoxControl>

私たちのプロジェクトは、IIS6 (Windows Server 2003) に展開された .NET 3.5 (2.0) 上の ASP.NET Web プロジェクトであり、Sharepoint 2007、SQL Server 2005 を使用しています。ビルド、展開、および Visual Studio マークアップは問題ありません。

問題: テスト環境に展開した後、Sharepoint ページにユーザー コントロールがまったく表示されず、その理由がわかりません。

ビルドとデプロイは正常に機能し、Sharepoint ページも表示されますが、コントロールがどこにも表示されません。実際、HTML 応答には、ユーザー コントロールの痕跡はまったく含まれていません。コントロールに純粋な HTML テキストを配置し、機能を持たなくても。エラー メッセージは表示されず、イベント ハンドラーは発生する可能性のあるエラーや警告に関する情報を提供しません。

何か不足していますか?有効にする必要があるもの、追加する必要がある属性、またはどこかの参照はありますか? とにかく、この非表示動作がわかりやすいエラー メッセージを生成することはありますか?

4

2 に答える 2

0

コメントでやり取りしたにもかかわらず、あなたと私が同じことについて話しているかどうかわからないため、これを回答として投稿しています。

ご存じのとおり、ASP.NET には、ユーザー コントロールと Web カスタム コントロールの 2 種類のコントロールがあります。 ユーザーコントロールには、マークアップを含む .ascx ファイルがあり、これは重要です。プロジェクト間で共有することはできません。.ascx ファイルはアセンブリの一部ではないため、それらが含まれているプロジェクトをコンパイルしてそのアセンブリを参照するのは適切ではありません。Webカスタムコントロールにはマークアップ ファイルがありません。これらは完全にコードで作成され、そのコントロールはプログラムで作成され、カスタム コントロールの Controls コレクションに追加されます。

そのため、置き換える別のアセンブリ内のサード パーティ コントロールが Web カスタム コントロールであるか、ソースで別のマークアップ ファイルを使用している場合は、仮想パス プロバイダー トリックなどのトリックを使用している必要があります。これを達成します。

あなたは、ユーザー コントロールとコード ビハインドについて、あたかも別のものであるかのように話しました。そのため、あなたが実際に Web ユーザー コントロールについて話していると私は信じるようになりました。しかし、これらを Web プロジェクト間で共有することはできません。コントロールを外部アセンブリに配置する必要がある場合、最も簡単な方法は、そのコンテンツをプログラムで構築するカスタム コントロールとして書き直すことです。

Virtual Path Providerソリューションや、Scott Guthrie の有名なソリューション (こちら)など、他のオプションもあります。しかし、最もトリッキーなオプションは、カスタム コントロールとして記述することです。

于 2012-10-05T17:12:57.810 に答える
0

それを見つけるには、DLLをGAC for SharePointに登録する必要があると思います。私はそこに間違っている可能性がありますが、bin dirにコピーするとうまくいきます。しかし、登録時に Assembly 属性で完全修飾名を使用する必要があることは確かです。

<% @Register TagPrefix= "Selector" Namespace="MyMainNamespace.SubNamespace.SelectorPopup" Assembly="MyMainNamespace.SubNamespace.SelectorPopup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7fa78676161515a2" %>
于 2012-10-01T14:16:35.680 に答える