首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在引用的XSL模板中使用用于脚本编写的程序集

在引用的XSL模板中使用用于脚本编写的程序集
EN

Stack Overflow用户
提问于 2010-01-15 17:35:12
回答 1查看 2.4K关注 0票数 3

有两个XSL文件。其中一个包括使用<xsl:include>的另一个。主模板根据节点值决定要调用的实际模板,其中包含的模板包含实际的转换规则。这里没什么特别的。

但是包含的文件有一个脚本块:

代码语言:javascript
复制
  <msxsl:script language="VB" implements-prefix="user">
    <msxsl:assembly href="C:\Absolute\Path\MyEscaper.dll" />
    <msxsl:using namespace="ZebraEscaper.MyCompany" />
    <![CDATA[
    Public Function escape(s As String) As String
      Return EncodeField(s, True)
    End Function
    ]]>
  </msxsl:script>

user: template ()函数稍后将在包含的模板中使用。

现在,我转到VS2008 XSLT调试器。

主模板调用<xsl:apply-templates>,并执行包含的模板。出现FileNotFound异常,“无法加载文件或程序集'MyEscaper、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null‘或其依赖项之一。系统找不到指定的文件。”

现在,如果我只访问包含的文件并像执行独立模板一样执行它,而不是包含在任何东西中,那么一切都会正常工作。程序集被找到,函数被调用,但是显然,作为设计为包含的模板,结果是没有意义的。

那么这个问题--为什么当模板被包含时,系统无法找到程序集?

更多信息

文档指出,“程序集路径名解析了两次--一次在编译期间,一次在执行期间。”如果我故意在路径中输入错误,我会得到相同的file://C:\Absolute\Path\MyEscaper.dll.异常,但是格式化不同,系统表示找不到FileNotFound。但是,当路径正确时,异常声称它找不到MyEscaper.dll、version=blabla、public token=null,该异常发生在.Net创建的CompiledStylesheet.dll中。我相信编译后的样式表被告知按名称调用程序集,而不是按href调用,而且由于它不在其临时文件夹中,调用失败。

为什么会这样呢?一条绝对路径在哪里,为什么会被翻译成相对路径,我如何控制它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-21 12:20:03

所以。

由于某些原因,在包含的场景中,程序集的路径在编译和执行期间被不同地解析。为什么会这样,我一点也不知道。

只找到了两种理智的解决办法:

  1. 将引用程序集中的所有代码移动到XSL模板中,使其成为嵌入式脚本。如果是小助手函数,这实际上是首选的。否则,
  2. 使用强名称对引用的程序集进行签名,将其添加到GAC,然后使用name而不是href从模板中引用它。这样,在编译和执行过程中将以相同的方式查找程序集,并将找到.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2073577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档