Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检测特定代码线上出现的错误?_C#_.net_Xslt - Fatal编程技术网

C# 如何检测特定代码线上出现的错误?

C# 如何检测特定代码线上出现的错误?,c#,.net,xslt,C#,.net,Xslt,[如果您发现标题不够好,请编辑标题] 我有触发XSL转换的代码: objMemoryStream = new MemoryStream(); xslTransform = new XslCompiledTransform(); xpathXmlOrig = new XPathDocument("E:\\xslt error\\Simulation_of_error\\input.xml"); xslSettings = new XsltSettings(); xslSettings.Enab

[如果您发现标题不够好,请编辑标题]

我有触发XSL转换的代码:

objMemoryStream = new MemoryStream();

xslTransform = new XslCompiledTransform();
xpathXmlOrig = new XPathDocument("E:\\xslt error\\Simulation_of_error\\input.xml");

xslSettings = new XsltSettings();
xslSettings.EnableScript = true;
xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver());
xslTransform.Transform(xpathXmlOrig, null, objMemoryStream);
objMemoryStream.Position = 0;
StreamReader objStreamReader = new StreamReader(objMemoryStream);
方法
xslTransform.Load(strxmlquerytransferormpath,xslSettings,newxmlurlsolver())
是一个牺牲品,由于超时问题,它有时会失败

我想检测这个代码行的失败并再次执行,直到它成功执行

我尝试使用“尝试捕捉和WHILE方法”:

但问题是“错误被记录在日志文件中”。整个代码在另一个try语句下,我怀疑它正在写入日志。这是我不想要的。。。我不想让最终用户知道这个代码行的失败

有什么办法可以完成吗


错误的出现完全是随机的。第一次失败时,我尝试重新触发代码,这可能会导致成功的转换(在下一次尝试中)!这就是为什么我得出结论,调用Load()方法可以解决问题。您是否尝试删除内联脚本并将扩展对象传递给转换

我相信这很可能会解决问题

否则,您应该捕获及其属性,并在代码中提供异常发生的位置


更新:编写传递给转换的扩展函数(扩展对象的一部分)的简单示例,并提供其在XSLT转换中的用法。

您是否尝试删除内联脚本并将扩展对象传递给转换

我相信这很可能会解决问题

否则,您应该捕获及其属性,并在代码中提供异常发生的位置


更新:编写传递给转换的扩展函数(扩展对象的一部分)的简单示例,并提供了它在XSLT转换中的用法。

尝试使用一个构造函数重载。它将允许您逐步完成转换

//public XslCompiledTransform(bool enableDebug);
var xslTransform = new XslCompiledTransform(true); 

尝试使用一个构造函数重载。它将允许您逐步完成转换

//public XslCompiledTransform(bool enableDebug);
var xslTransform = new XslCompiledTransform(true); 


你能公布你收到的确切的例外情况吗?此外,在循环成功之前,您应该非常小心,因为在某些情况下,您的程序将永远不会退出此循环。例如,如果找不到该文件怎么办?单独处理特定的异常将是一个更好的途径。这个循环是一个等待发生的灾难。添加Thread.Sleep timeout和最大尝试次数。此外,该try-catch将不允许来自xslTransform.Load的任何错误传播,因此您可能选择了错误的树。不管怎样,如果我们知道确切的错误,我们可能会提供更多帮助。@aepheus,@Jeff,你好,很高兴看到你的评论。我之前已经发布了一个关于这个错误的问题,(我没有找到任何答案,所以我试着找到一个破解方法)这是它的链接:我在那里提供了相关的链接和代码。。希望它能让你更深入地理解这个问题。@dtb,谢谢你的版本。你能发布你收到的确切的异常情况吗?此外,在循环成功之前,您应该非常小心,因为在某些情况下,您的程序将永远不会退出此循环。例如,如果找不到该文件怎么办?单独处理特定的异常将是一个更好的途径。这个循环是一个等待发生的灾难。添加Thread.Sleep timeout和最大尝试次数。此外,该try-catch将不允许来自xslTransform.Load的任何错误传播,因此您可能选择了错误的树。不管怎样,如果我们知道确切的错误,我们可能会提供更多帮助。@aepheus,@Jeff,你好,很高兴看到你的评论。我之前已经发布了一个关于这个错误的问题,(我没有找到任何答案,所以我试着找到一个破解方法)这是它的链接:我在那里提供了相关的链接和代码。。希望它能让您更深入地理解这个问题。@dtb,谢谢您的版本。实际上,dll文件是在使用代码行xslTransform.Load()方法时创建的。在服务器中,许多其他代码段正在运行,这可能会主导此进程,因此进程的执行需要很长时间,另一方面,dll文件被删除(可能是由于某些超时问题),这使得函数(其执行不完整)弹出错误,因为它无法找到*.dll(还有一些*.tmp)文件。因此我得出结论,重新使用xslCompliledTransfom.Load()可以解决这个问题。。但不幸的是。它在成功执行之前还会弹出错误:(因为我在xslt代码中使用了C#脚本(您可以在示例代码中找到),这需要XSLCompiletTransform创建dll文件来执行xslCompiledTransform.Load()方法。关于服务器性能,值得注意的一点是:它不会每次都触发此错误:!转换的重新触发确实工作得很好。!这会导致混乱。@baby程序员:所以,更重要的是,这意味着:删除内联脚本并使其成为正常的扩展函数。只要这样做,您就会消除这个问题。@Dimitre,请原谅,先生,我需要一些指导。我不了解如何使用扩展函数以及如何使用扩展函数。因为我不是xslt专家,我需要一些示例代码等。来理解。@Baby程序员:欢迎您:)。我用一个代码示例的链接更新了我的答案,该示例介绍了如何在XSLT转换中指定/添加、转换和使用扩展函数。实际上,dll文件是在使用代码行xslTransform.Load()方法时创建的。在服务器中,许多其他代码段正在运行,这可能会主导此进程,因此进程的执行需要很长时间,另一方面,dll f