1

UI を提供する共通の Web ユーザー コントロールを使用して、いくつかのユーザー インターフェイス機能を共有するクライアント用のモジュールをいくつか開発しています。最初のモジュールを作成して .ascx ファイルに追加したときは、すべて問題ありませんでした。同じコントロールを 2 番目のモジュールに追加すると、次のエラーが発生します。

DotNetNuke.Services.Exceptions.ModuleLoadException: タイプ 'XXX.ParametersControl.ParameterTabControl' はあいまいです: アセンブリ 'C:\Clients\XXX\Code\Reporting\DotNetNuke_BaseInstall\bin\XXX.KPI_Configurable_Chart.DLL' またはアセンブリから来る可能性があります「C:\Clients\XXX\Code\Reporting\DotNetNuke_BaseInstall\bin\XXX.Survey_Grid.DLL」. 型名でアセンブリを明示的に指定してください。

両方のモジュールは、この追加の UI コントロールがなくても問題なくインストールおよび実行されます。

UI コントロールを別のプロジェクトとして開発し、含まれているバックエンド機能用に独自の DLL をコンパイルし、コンパイルされた DLL とモジュール インストール ファイル内のコントロール ASCX ファイルだけを使用してアプリケーションをデプロイしました。

メイン モジュール ASCX へのインクルードは、次のように行われます。

<%@ 登録 src="ParameterControl/ParameterTabControl.ascx" tagname="ParameterTabControl" tagprefix="uc1" %>

ご覧のとおり、Subversion 外部として実装するサブディレクトリからインターフェイス コントロールを取得して含めます。

次のように、メイン モジュールの .vb 分離コードでコントロールのオブジェクトとプロパティを参照します。

ParameterTabControl1.DateRangeTabVisible = True
If (ParameterTabControl1.StartDate Is Nothing) Then
     ParameterTabControl1.StartDate = DateAdd(DateInterval.Day, -90, Now)
End If

これが起こらないように設計する方法に関するヒントはありますか? コントロールのプロパティとオブジェクトをクエリしてプロパティを設定および取得できるようにしながら、サブコントロール ASCX を独自の DLL にのみ接続し、メイン モジュール コントロールにバインドしないようにする方法はありますか?

4

2 に答える 2

2

@ Register タグで共有アセンブリまたは名前空間を指定しようとしましたか? 共有コンポーネントの正確な値はわかりませんが、使用する名前空間とアセンブリを正確に指定できます。

<%@ Register src="ParameterControl/ParameterTabControl.ascx"
tagname="ParameterTabControl" tagprefix="uc1" assembly="XXX.SharedControls"
namespace="My.Shared.Control" %>  

詳細については、@ Register のドキュメントを参照してください。

于 2010-02-18T18:53:30.210 に答える
0

プロジェクト間のリンクを解除するための回避策を使用して、これをうまく解決したと思います。メインコントロールと同じソリューションで両方を使用することが問題のようでした。DNNモジュールのソリューションからParameterTabControlを引き出し、VSの2番目のコピーで開くだけです。VSに「プロジェクト参照」がないと、コードをDLLに直接リンクするだけで、DLLの名前空間はインポートされません。

2つのDNNモジュールソリューション間のバージョン管理の問題を防ぐために、ビルド後のイベントをParameterTabControlに追加して、新しいDLLをテストプラットフォームに自動的にプッシュする必要がありましたが、それほど手間はかかりませんでした。そうすれば、最新の共通DLLが常に両方で利用可能になり、コンパイル時に両方に同じバージョンが表示されます。これはハックですが、機能します。

一度、スローされて表示されたエラーの完全性と正確性の両方に嬉しい驚きを覚えました。

ランスとイアンに感謝します。

于 2010-02-20T17:58:58.910 に答える