Chr*_*ers 4 tridion tridion-2011
在我的一个C#模板构建块中,我有以下代码行
publication.GetListPublishItems(uriTarget, false, false,
TDSDefinesInterop.ListColumnFilter.XMLListDefault, listRowFilter);
Run Code Online (Sandbox Code Playgroud)
在实现自定义解析器之前,此代码执行得非常快.既然我的解析器是针对Publication ItemType实现的,那么代码的执行速度非常慢.由此我得出结论,通过该GetListPublishItems()方法在幕后调用新的Resolver (这是有道理的).我想我需要以某种方式修改解析器.但是,当调用该方法时,我似乎无法在我的解析器中找到一个断点.
我通常在调试模板时附加到'TcmTemplateDebugHost',或者在调试解析器时直接附加到发布者进程.我的解析器似乎只是在我第一次按Publish时被击中而不是在调用GetListPublishItems()方法时被击中.
所以这个问题有两个方面:
我不确定,但我无法想象一个理智的场景,即自定义解析器不会涉及GetListPublishItems().你的证据似乎支持这一点,但当然,如果我们能回答你问题的第二部分,我们肯定会知道.
我想你所做的关于托管过程的任何正常假设都可能是正确的,例如,如果你在发布期间调用你的模板,那么TcmPublisher就是这个过程.或者,如果您要在GUI中打开发布的发布对话框并点击"显示要发布的项目",那么它可能是COM代理进程(dllhost.exe)...依此类推.但是,确定的一种方法是使用Sysinternals Process Explorer,它有一个非常方便的功能,允许您搜索哪些进程加载了给定的dll.(查看"查找"菜单)
断点无法咬合的一个可能原因是Visual Studio无法正确加载符号.在调试模板构建块时,Tridion会显式加载来自已知位置的符号(CM配置中为tridion.templating/debugging/@pdbdirectory),这是模板上传器放置PDB的位置.当发布者进程加载自定义解析器时,我怀疑是否有任何这样的特殊机制来定位符号,因此您将不得不回退到标准的.NET方法.我要尝试的第一件事是确保自定义解析程序类的符号与程序集(即bin目录)位于同一位置.如果失败,您可以在Visual Studio中配置符号路径.
首先要做的是在Visual Studio中观察调试输出.如果您启动该过程然后附加到该过程,您将看到正在加载的各种程序集.如果Visual Studio可以找到符号,您将看到输出显示"符号已加载".
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |