代码之家  ›  专栏  ›  技术社区  ›  Jeff

ASP.NET VirtualPath提供程序HttpCompileeException

  •  3
  • Jeff  · 技术社区  · 14 年前

    我有一个VirtualPathProvider,它正在从数据库加载我的aspx文件内容。除了我的aspx文件引用了web.config中没有显式提到的命名空间或程序集之外,其他一切看起来都很好。

    解决办法似乎很简单,对吧?向页添加程序集和导入指令。。。但这似乎行不通。我仍然得到以下HttpCompileeException:

        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?)
    

    尽管如此,在数据库中保存的test.aspx页面中,我有:

    <%@ 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>
    

    现在,我已经知道MyApp.Data已经加载到AppDomain中(我在运行时通过检查AppDomain.CurrentDomain.GetAssemblies()进行了验证),并且我知道没有任何失败的请求来加载MyApp.Data程序集(因为我已绑定到AppDomain.resolvepassembly事件,并且它在异常发生之前没有启动)。此外,如果我将程序集目录中的名称更改为MyApp.Data123(一个伪造的名称),则试图加载程序集的页面会爆炸。

    如果我完全从页面中删除assembly指令,那么我得到的名称空间类型或名称空间名称“MyApp”找不到…所以使用assembly指令似乎有点帮助。。。

    你知道我在这里遗漏了什么吗?谢谢。

    1 回复  |  直到 13 年前
        1
  •  0
  •   Community CDub    8 年前

    可能重复 .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.