2010-03-03 64 views
0

您可能已经注意到,当您调试来自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.csApp_Web_sqj3krv3.1.cs)的.CS文件,看看ASP.NET从产生我的ASPX标记。试图更改前面的问题:如何从任意ASPX文件中获取此文件(假设文件是​​正确的,因此不会在哪里搜索信息)?

有关于此的任何提示?

回答

2

您可以找到以下目录中生成的代码:

C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \临时 ASP.NET文件

要确定确切的路径,请使用以下代码片段。

System.Web.HttpRuntime.CodegenDir 

ASP.NET使用BuildProviderCodeDOM以产生用于的WebForms /用户控件代码。您可以创建一个自定义BuildProvider来为特定扩展生成自定义代码。看看下面的文章了解更多信息。

http://aspalliance.com/1102

0

您是否使用visual studio编写代码?如果是这样,您可以使用代码隐藏功能编写aspx页面的代码,该代码生成一个.cs文件。

+0

看起来像我的问题有点不清楚。我会试着重述一下。 – Kerido 2010-03-03 18:59:33

+0

只是重读这个问题 - 你是用内联c#编写你的asp代码吗? – chama 2010-03-03 19:00:37

+0

不,我使用Visual Studio编写ASPX和ASPX.CS文件。我只将标记放入ASPX中,并将所有逻辑放在业务层或相应的代码隐藏文件中。我需要的仅仅是在页面解析时访问从ASPX页面生成的文件。 – Kerido 2010-03-03 19:12:25

0

ASP.Net页面,用户控件等都是'按需编译'的。你看到的错误可能是关于'编译失败'而不是运行时失败。

您可以使用aspnet_compiler.exe来“预编译”您的网站。这将产生包含您的编译类的“占位符”.aspx文件和程序集。

使用此工具,您将能够确定编译是否失败(它很可能无法使用aspnet_compiler.exe进行预编译)。否则,你只剩下含有可以使用诸如“Reflector”之类的工具反编译的类的纯组件。

希望这有助于

+0

我编辑了这个问题,以更好地解释我需要什么。你谈论的是来自另一个主题。 – Kerido 2010-03-03 19:46:17