Доступ к исходному коду, созданному из файлов ASPX / ASCX

Вы, наверное, заметили, что при отладке ошибки, которая возникает из файла 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>

Когда я открываю страницу в браузере, отображается следующая ошибка: 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 (при условии, что файл правильный и, следовательно, не будет предоставлена ​​информация о том, где искать)?

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


person Kerido    schedule 03.03.2010    source источник


Ответы (3)


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

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Временные файлы ASP.NET

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

System.Web.HttpRuntime.CodegenDir

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

http://aspalliance.com/1102

person Mehdi Golchin    schedule 03.03.2010

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

person chama    schedule 03.03.2010
comment
Похоже, я немного не понимаю в вопросе. Я постараюсь перефразировать это. - person Kerido; 03.03.2010
comment
Просто перечитайте вопрос - вы пишете свой asp-код с помощью встроенного C #? - person chama; 03.03.2010
comment
Нет, я использую Visual Studio для записи файлов ASPX и ASPX.CS. Я только помещаю разметку в ASPX и размещаю всю логику на бизнес-уровне или в соответствующем файле кода программной части. Все, что мне нужно, - это получить доступ к файлу, сгенерированному на странице ASPX при анализе страницы. - person Kerido; 03.03.2010

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

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

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

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

person Marvin Smit    schedule 03.03.2010
comment
Я отредактировал вопрос, чтобы лучше объяснить, что мне нужно. Вы говорите о другом предмете. - person Kerido; 03.03.2010