【问题标题】:ASP .NET VirtualPathProvider HttpCompileExceptionASP .NET VirtualPathProvider HttpCompileException
【发布时间】:2011-04-08 14:59:32
【问题描述】:

我有一个从数据库加载我的 aspx 文件内容的 VirtualPathProvider。一切似乎都很好,除非我的 aspx 文件引用了我的 web.config 中未明确提及的命名空间或程序集。

解决方案似乎很简单,对吧?向页面添加程序集和导入指令......但这似乎不起作用。我仍然得到以下 HttpCompileException:

    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.ResolveAssembly 事件,并且在异常发生之前它没有触发)。另外,如果我将程序集目录中的名称更改为 MyApp.Data123(假名),页面会在尝试加载程序集时爆炸。

如果我从页面中完全删除程序集指令,那么我会得到命名空间 找不到类型或命名空间名称“MyApp”...因此在此处使用程序集指令似乎确实有点帮助...

知道我在这里缺少什么吗?谢谢。

【问题讨论】:

    标签: .net asp.net-mvc asp.net-mvc-2 virtualpathprovider


    【解决方案1】:

    .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.
    

    【讨论】:

    • 不,这不是一个预编译的网站……问题不在于 VirtualPathProvider 没有被使用……而是它所服务的页面中的程序集和命名空间引用无法识别。
    • 嗯,当一个网站第一次启动时,asp.net 将程序集中的所有 .aspx 页面预编译到它的 .net 临时文件夹中。因此,在您的情况下,与预编译没有发生相同的问题,并且正如其他线程回答所说,这是框架的限制。尝试使用 .cshtml 可能会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多