4

コンパイル時に利用できないユーザー コントロールを含めるために VirtualPathProvider を使用しています。実際にコントロールを含む dll への参照を除いて、すべてが正しく機能しています。

コントロールを持つページが呼び出されると、dll を bin フォルダーに配置しない限り、コントロールの種類を見つけることができません。

エラー: パーサー エラーの説明: この要求を処理するために必要なリソースの解析中にエラーが発生しました。次の特定の解析エラーの詳細を確認し、ソース ファイルを適切に変更してください。

パーサー エラー メッセージ: タイプ 'App.Modules.ModuleA.Controls.Entity1Item' を読み込めませんでした。

ソース エラー:

1 行目: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Entity1Item.ascx.cs" Inherits="App.Modules.ModuleA.Controls.Entity1Item" %>

すべての重要な AppDomain イベント (AssemblyResolve、TypeResolve、および ReflectionOnlyAssemblyResolve) を処理しようとしましたが、私のタイプに対して呼び出されるイベントはありません。

TypeResolve のドキュメントで、Type.GetType が実行され、型が見つからない場合は常にこれが呼び出されることを見ました。タイプが必要なときに ASCX がイベントをトリガーしていないようです...なぜですか?

ありがとう!アレックス

4

2 に答える 2

3

An AssemblyResolve event should solve this, but you need to specify the assembly name in the type name, e.g.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Entity1Item.ascx.cs"
    Inherits="App.Modules.ModuleA.Controls.Entity1Item, YourDynamicAssemblyName" %>

The AssemblyResolve event will then fire asking you to load 'YourDynamicAssemblyName'.

于 2011-08-03T20:15:41.100 に答える
0

仮想化できるコンテンツはどれですか?仮想化できるアイテムは、ASPX、マスターページ、ASCX、テーマなどの参照可能なタイプのみです。デフォルト以外の閲覧可能なコンテンツを仮想化するには、BuildProviderクラスをマップする必要があります。

「BuildProviderがビルドされると、Temporary ASP.NET Filesフォルダーに新しいクラスがビルドされます。フォルダーに追加されたクラスはすべて、アプリケーションで自動的に使用できるようになります。」したがって、私にとっては、タイプを解決するのではなく、実行時にユーザーコントロールを構築するためにSystem.Web.Compilation.UserControlBuildProviderをマップする必要があるように見えますが、現時点ではその方法がわかりません。それがまだ役立つことを願っています

于 2011-08-02T20:50:51.230 に答える