Отладка XslCompiledTransform в C#

Я пробовал, пробовал и пробовал, но мне не удалось войти в 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 сделала это, я уверен, что очень окажется полезным в будущем.

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

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

Вы пытаетесь отладить реализацию Transform () фреймворка или пытаетесь установить точки останова в своем XSLT?

bryanbcook 16.01.2009 21:05

AFAIK, это невозможно с отладчиком XSLT Visual Studio. Для отладки вам всегда понадобится файл XSLT на диске.

Dirk Vollmar 24.04.2009 22:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
3 358
2

Ответы 2

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

Это слишком подробно, чтобы вдаваться в SO-ответ, но вот отличное сообщение в блоге на эту тему.

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

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

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

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

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

Другие вопросы по теме