2010-09-06 5 views
4

J'ai un VirtualPathProvider qui charge mon contenu de fichier aspx à partir d'une base de données. Tout semble bien aller sauf si mon fichier aspx contient une référence à un espace de noms ou un assembly qui n'est pas explicitement mentionné dans mon web.config.ASP .NET VirtualPathProvider HttpCompileException

La solution semble facile non? Ajouter des directives d'assemblage et d'importation à la page ... Mais cela ne semble pas fonctionner. Je toujours la HttpCompileException suivante:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET 
Files\app.server\70480a40\2a773b44\App_Web_test.aspx.e7cf0b6b.mzeindht.0.cs(183): error CS0234: 
The type or namespace name 'Model' does not exist in the namespace 'MyApp.Data' (are you missing an assembly reference?) 

Même si, dans ma page test.aspx enregistré dans le DB je:

<%@ Assembly Name="MyApp.Data" %> 
<%@ Import Namespace="MyApp.Data" %> 
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyApp.Data.Model.TestModel>" %> 

<asp:Content ContentPlaceHolderID="MainContent" runat="server"> 
</asp:Content> 

Maintenant, je sais déjà que MyApp.Data a déjà été chargé dans AppDomain (j'ai vérifié à l'exécution en vérifiant AppDomain.CurrentDomain.GetAssemblies()) et je sais qu'aucune demande échouée est faite pour charger l'assembly MyApp.Data (parce que j'ai lié à l'événement AppDomain.ResolveAssembly et il ne tire pas juste avant que l'exception se produise). En outre, si je change le nom dans le répertoire d'assembly en MyApp.Data123 (un nom bidon), la page bombarde en essayant de charger l'assembly. Si je supprime complètement la directive d'assembly de la page, alors j'obtiens l'espace de noms Le nom de type ou d'espace de noms 'MyApp' est introuvable ... donc avoir la directive d'assembly là-bas semble aider un peu.

Une idée de ce qui me manque ici? Merci.

Répondre

0

double possible de .NET VirtualPathProviders and Pre-Compilation

If a Web site is precompiled for deployment, content provided by a VirtualPathProvider 
instance is not compiled, and no VirtualPathProvider instances are used by the precompiled 
site. 
+1

Non, ce n'est pas un site précompilé ... et le problème est pas que le VirtualPathProvider ne soit pas utilisé ... c'est que les références de montage et espace de noms dans la page il sert ne sont pas reconnus. – Jeff

+0

Eh bien, quand un site web démarre, asp.net précompile toutes les pages .aspx des assemblées dans son dossier temporaire .net. Donc, c'est le même problème que la précompilation ne se produit pas dans votre cas, et comme l'autre thread répond que c'est une limitation du cadre. Essayez avec .cshtml cela peut fonctionner. – Softlion