ファイルシステム以外の場所(サービス内など)に「コンテンツ」(ASPX / ASCXおよびアセンブリ)を格納し、必要に応じて動的にロードするASP.NetWebアプリケーションを作成しようとしています。
別の場所からASPX/Master / ASCXファイルを読み取る処理を行うVirtualPathProviderを正常に作成しましたが、これらのASPXページがクラスを継承すると問題が発生します。つまり、コードが遅れている場合です。
別の質問の回答のおかげで、実行時にアセンブリをアプリケーションに正常にロードできるようになりました。しかし、ランタイムがページをコンパイルしようとすると、次のエラーが発生します。
「コンパイラエラーメッセージ:CS0400:タイプまたは名前空間名'Web'がグローバル名前空間に見つかりませんでした(アセンブリ参照がありませんか?)」
[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()] public class default_aspx:global :: Web.Code.CodeBehind、System.Web.SessionState.IRequiresSessionState、System.Web.IHttpHandler
わかりやすいように、コードを要約して、問題の簡単な例を示しました。このコードはここからダウンロードできます。
アセンブリは、AppDomain.AssemblyResolveイベントを使用して、実行時に動的にロードされます。これはglobal.asaxにあり、次のようになります。
protected void Application_Start(object sender, EventArgs e)
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(Assembly_Resolve);
}
Assembly Assembly_Resolve(object sender, ResolveEventArgs args)
{
Assembly assembly = AppDomain.CurrentDomain.Load(Resources.Web_Code);
if (args.Name == assembly.FullName)
{
return assembly;
}
return null;
}
何か案は?
編集 何らかの理由でWeb.Codeアセンブリを更新する必要がある場合、これらの変更を有効にするには、Webプロジェクトの「ReferencedAssemblies」フォルダーにコピーする必要があります。