Я пробовал, пробовал и пробовал, но мне не удалось войти в 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 показывает пошаговое выполнение самой таблицы стилей построчно (в отличие от кода, который выполняет каждую строку преобразования)
AFAIK, это невозможно с отладчиком XSLT Visual Studio. Для отладки вам всегда понадобится файл XSLT на диске.





Недавно Microsoft выпустила символы и исходный код для .Net Framework, чтобы разрешить отладку в таких сценариях. Настройка занимает несколько секунд, но как только вы это сделаете, вы сможете перейти к методу Load независимо от того, как вы построили XslCompiledTransform.
Это слишком подробно, чтобы вдаваться в SO-ответ, но вот отличное сообщение в блоге на эту тему.
У меня была такая же проблема при попытке использовать XmlReader.Create(new StringReader(String)).
Кажется, что отладчик должен иметь возможность найти файл на диске для работы отладки, но это не означает, что нельзя использовать StringReader или потоковую версию XmlReader.Create. Попробуйте эту версию:
XmlReader.Create(new StringReader(String), New XmlReaderSettings(), baseURI)
В моем случае я использую файловый ресурс для хранения моей строки xslt, поэтому есть файл, на который я могу указать. На самом деле вам не нужно указывать абсолютный путь, который отладчик будет знать для поиска исходного кода в папках, указанных в разделе Решение / Свойства / Исходный код отладчика.
Документация для XslCompiledTransform вводит в заблуждение, поскольку подразумевает, что все, что требуется, - это XmlReader, поддерживающий интерфейс IXmlLineInfo.
Вы пытаетесь отладить реализацию Transform () фреймворка или пытаетесь установить точки останова в своем XSLT?