【问题标题】:Accessing source code generated from ASPX/ASCX files访问从 ASPX/ASCX 文件生成的源代码
【发布时间】:2011-01-23 08:44:06
【问题描述】:

您可能已经注意到,当您调试来自 ASPX 或 ASCX 文件(实际上,不是来自相应的代码隐藏文件)的错误时,ASP.NET 会显示一个错误页面,显示源文件和行发生错误的位置。正在显示的源文件是通过解析页面/控件自动生成的。问题是:我怎样才能看到这个源文件而不故意导致异常?

我很想知道有一些编程方式(复杂性无关紧要)从一系列 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

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

有什么建议吗?

【问题讨论】:

    标签: c# asp.net code-generation ascx


    【解决方案1】:

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

    【讨论】:

    • 看起来我对这个问题有点不清楚。我会尝试改写。
    • 重读这个问题 - 你是用内联 c# 编写你的 asp 代码吗?
    • 不,我使用 Visual Studio 编写 ASPX 和 ASPX.CS 文件。我只将标记放入 ASPX 并将所有逻辑放在业务层或相应的代码隐藏文件中。我只需要在解析页面时访问从 ASPX 页面生成的文件。
    【解决方案2】:

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

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

    使用此工具,您将能够确定编译是否失败(很可能使用 aspnet_compiler.exe 进行预编译也会失败)。否则,您将得到包含类的纯程序集,这些类可以使用“Reflector”等工具进行反编译。

    希望对你有帮助,

    【讨论】:

    • 我编辑了问题以更好地解释我的需求。你说的是另一个话题。
    【解决方案3】:

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

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

    要确定确切的路径,请使用以下代码 sn-p。

    System.Web.HttpRuntime.CodegenDir
    

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

    http://aspalliance.com/1102

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多