Доступ к исходному коду, сгенерированному из файлов ASPX / ASCX - PullRequest
2 голосов
/ 03 марта 2010

Вы, вероятно, заметили, что при отладке ошибки, которая возникает из файла 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.cs и App_Web_sqj3krv3.1.cs), и посмотреть, что ASP.NET сгенерировал из моей разметки ASPX. Попытка перефразировать предыдущий вопрос: как я могу получить этот файл из произвольного файла ASPX (при условии, что файл правильный и, следовательно, не будет предоставлена ​​информация о том, где искать)?

Есть какие-нибудь советы по этому поводу?

Ответы [ 3 ]

2 голосов
/ 03 марта 2010

Вы можете найти сгенерированный код в следующем каталоге:

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary Файлы ASP.NET

Чтобы определить точный путь, используйте следующий фрагмент кода.

System.Web.HttpRuntime.CodegenDir

ASP.NET использует BuildProvider и CodeDOM для генерации кода для WebForms / UserControls. Вы можете создать собственный BuildProvider для генерации пользовательского кода для определенного расширения. Посмотрите следующую статью для получения дополнительной информации.

http://aspalliance.com/1102

0 голосов
/ 03 марта 2010

ASP.Net-страницы, пользовательские элементы управления и тому подобное «компилируются по запросу». Вероятно, вы видите ошибку «ошибка компиляции», а не ошибка времени выполнения.

Вы можете использовать aspnet_compiler.exe для «прекомпиляции» вашего сайта. Это даст вам «заполнители» .aspx файлы и сборки, содержащие ваши скомпилированные классы.

с помощью этого инструмента вы сможете определить, не скомпилирована ли ошибка компиляции (очень вероятно, что она прекратит прекомпиляцию с использованием aspnet_compiler.exe). В противном случае у вас останутся чистые сборки, содержащие классы, которые можно декомпилировать с помощью таких инструментов, как «Reflector».

Надеюсь, это поможет,

0 голосов
/ 03 марта 2010

Вы используете Visual Studio для написания своего кода? Если это так, вы можете написать код для страниц aspx, используя функцию code code, которая создает файл .cs.

...