访问从ASPX/ASCX文件生成的源代码
您可能已经注意到,当您调试来自ASPX或ASCX文件(字面上,不是来自相应的代码隐藏文件)的错误时,ASP.NET显示错误页面向您显示源文件和发生错误的行。正在显示的源文件是通过解析页面/控件自动生成的。问题是:如何在不故意导致异常的情况下看到此源文件?访问从ASPX/ASCX文件生成的源代码
我很想听听有一些编程方式(复杂性并不重要)从一系列ASPX/ASCX文件生成源文件(最好是.cs
)。
示例。考虑以下ASPX页面(代码隐藏文件,甚至可能是不存在的):
<%@ Page Language="C#"%>
<%@ Register Assembly="AspxGen" Namespace="AspxGen" TagPrefix="ag" %>
<html>
<head><title>Some Title</title></head>
<body>
<form id="form1" runat="server">
<asp:Label runat="server" Text="<%# ThereIsNoSuchProperty %>" />
</form>
</body>
</html>
当我打开浏览器页面,显示以下错误:ASPX Compiler Error http://www.ko-sw.com/misc/sc_error_aspx.png
当我点击高亮显示的链接,它显示了颁发给C#编译器的命令:
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE>
"c:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe" /t:library /utf8output
/R: REFERENCES GO HERE
/debug- /optimize+ /w:4 /nowarn:1659;1699;1701 /warnaserror-
"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\f66a2574\25dd72a2\App_Web_sqj3krv3.0.cs"
"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\f66a2574\25dd72a2\App_Web_sqj3krv3.1.cs"
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
d:\Dev\AspxGen\AspxGen\Default.aspx(9,80): error CS0103: The name 'ThereIsNoSuchProperty' does not exist in the current context
这意味着,理论上我可以打开传递到编译器(即App_Web_sqj3krv3.0.cs
和App_Web_sqj3krv3.1.cs
)的.CS文件,看看ASP.NET从产生我的ASPX标记。试图更改前面的问题:如何从任意ASPX文件中获取此文件(假设文件是正确的,因此不会在哪里搜索信息)?
有关于此的任何提示?
您可以找到以下目录中生成的代码:
C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \临时 ASP.NET文件
要确定确切的路径,请使用以下代码片段。
System.Web.HttpRuntime.CodegenDir
ASP.NET使用BuildProvider和CodeDOM
以产生用于的WebForms /用户控件代码。您可以创建一个自定义BuildProvider来为特定扩展生成自定义代码。看看下面的文章了解更多信息。
您是否使用visual studio编写代码?如果是这样,您可以使用代码隐藏功能编写aspx页面的代码,该代码生成一个.cs文件。
ASP.Net页面,用户控件等都是'按需编译'的。你看到的错误可能是关于'编译失败'而不是运行时失败。
您可以使用aspnet_compiler.exe来“预编译”您的网站。这将产生包含您的编译类的“占位符”.aspx文件和程序集。
使用此工具,您将能够确定编译是否失败(它很可能无法使用aspnet_compiler.exe进行预编译)。否则,你只剩下含有可以使用诸如“Reflector”之类的工具反编译的类的纯组件。
希望这有助于
我编辑了这个问题,以更好地解释我需要什么。你谈论的是来自另一个主题。 – Kerido 2010-03-03 19:46:17
看起来像我的问题有点不清楚。我会试着重述一下。 – Kerido 2010-03-03 18:59:33
只是重读这个问题 - 你是用内联c#编写你的asp代码吗? – chama 2010-03-03 19:00:37
不,我使用Visual Studio编写ASPX和ASPX.CS文件。我只将标记放入ASPX中,并将所有逻辑放在业务层或相应的代码隐藏文件中。我需要的仅仅是在页面解析时访问从ASPX页面生成的文件。 – Kerido 2010-03-03 19:12:25