4

您可能已经注意到,当您调试来自 ASPX 或 ASCX 文件(字面意思,不是来自相应的代码隐藏文件)的错误时,ASP.NET 会显示一个错误页面,显示源文件和所在行发生错误。正在显示的源文件是通过解析页面/控件自动生成的。问题是:如何在不故意导致异常的情况下查看此源文件?

我很想听听有一些编程方式(复杂性无关紧要).cs从一系列 ASPX/ASCX 文件生成源文件(最好是 )。

例子。考虑以下 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 编译器错误 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

这意味着,理论上我可以打开传递给编译器的 .CS 文件(即App_Web_sqj3krv3.0.csApp_Web_sqj3krv3.1.cs)并查看 ASP.NET 从我的 ASPX 标记中生成了什么。试图改写上一个问题:如何从任意 ASPX 文件中获取此文件(假设该文件是正确的,因此不会提供有关搜索位置的信息)?

有什么建议吗?

4

3 回答 3

3

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

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 文件

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

System.Web.HttpRuntime.CodegenDir

ASP.NET 使用BuildProviderCodeDOM为 WebForms/UserControls 生成代码。您可以创建自定义 BuildProvider 来为特定扩展生成自定义代码。请查看以下文章以获取更多信息。

http://aspalliance.com/1102

于 2010-03-03T19:29:49.890 回答
0

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

于 2010-03-03T18:58:21.957 回答
0

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

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

使用此工具,您将能够确定编译是否失败(使用 aspnet_compiler.exe 也很可能会导致预编译失败)。否则,您将留下纯程序集,其中包含可以使用“Reflector”之类的工具进行反编译的类。

希望这可以帮助,

于 2010-03-03T19:07:48.060 回答