Отладка XslCompiledTransform в C # - PullRequest
2 голосов
/ 16 января 2009

Я пробовал и пытался, но мне не удается войти в XslCompiledTransform без необходимости загружать таблицу стилей с диска (путем передачи URI в метод XslCompiledTransform.Load ()).

Я полностью осознаю, что вы можете войти в метод XslCompiledTransform.Transform (), только если вы загрузили таблицу стилей с диска через URI (как уже упоминалось) или загрузили таблицу стилей из XmlReader, который реализует интерфейс IXmlLineInfo.

Я загрузил таблицу стилей следующим образом:

XslCompiledTransform xslt = new XslCompiledTransform(true);
//grab string from textbox
XmlReader reader = XmlReader.Create(new StringReader(XsltBox.Text));

// Compile the style sheet.
xslt.Load(reader);

Судя по тому, что из прочитанной мною литературы, можно разрешить отладку. Однако, когда я пытаюсь войти в метод XslCompiledTransform.Transform (), я получаю сообщение: «Нет исходного кода, доступного для текущего местоположения»

Как уже упоминалось, я могу перейти к преобразованию, если сделаю следующее:

string stylesheet = @"C:\PathToMy\Stylesheet.xsl";

// Enable XSLT debugging.
XslCompiledTransform xslt = new XslCompiledTransform(true);
//compile stylesheet
xslt.Load(stylesheet);

Вышеуказанный метод невозможен, так как я не хочу постоянно читать с диска.


спасибо вам за этот полезный комментарий, я не осознавал, что Microsoft сделала это, я уверен, что это будет очень полезным в будущем.

однако, полагаю, я не совсем ясно выразился в своем вопросе. я не собирался входить в метод load, я хотел войти в метод transform, чтобы видеть, что происходит с преобразованием xsl. я подчеркнул метод загрузки, потому что параметр, который вы передаете, определяет, можете ли вы отладить метод преобразования (для этого необходимо передать XmlReader, который реализует интерфейс IXmlLineInfo).

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

Ответы [ 2 ]

1 голос
/ 10 июня 2009

У меня возникла та же проблема при попытке использовать XmlReader.Create(new StringReader(String)). Кажется, что отладчик должен быть в состоянии найти файл на диске для работы отладки, но это не означает, что StringReader или потоковая версия XmlReader.Create не могут быть использованы. Попробуйте эту версию:

XmlReader.Create(new StringReader(String), New XmlReaderSettings(), baseURI)

В моем случае я использую файловый ресурс для хранения моей строки xslt, поэтому есть файл, на который я могу указать. Фактически вам не нужно указывать абсолютный путь, который будет знать отладчик для поиска исходного кода в папках, указанных в разделе «Исходные коды решения / свойств / отладчика».

Документация для XslCompiledTransform вводит в заблуждение, поскольку подразумевает, что все, что требуется, - это XmlReader, поддерживающий интерфейс IXmlLineInfo.

1 голос
/ 16 января 2009

Недавно Microsoft выпустила символы и исходный код для .Net Framework, чтобы разрешить отладку в таких сценариях. Настройка занимает несколько секунд, но как только вы это сделаете, вы сможете перейти к методу Load независимо от того, как вы создали XslCompiledTransform.

Слишком подробно, чтобы перейти к такому ответу, но вот отличная запись в блоге на эту тему.

http://codebetter.com/blogs/james.kovacs/archive/2008/01/17/debugging-into-the-net-framework-source.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...