GFXGunblade
GFXGunblade

Reputation: 97

msxsl:script for c# in xslt function declared twice error

Hey all I'm trying to write an xslt template that uses a msxsl to create a hyperlink from a web.config appSetting. Every time I try to run the code, it tells me that I have declared the c# method in the script twice. The code is as follows:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:files="urn:my-script" >
        <msxsl:script implements-prefix="files" language="CSharp">
    <msxsl:assembly name="System.Configuration"/>
    <msxsl:using namespace="System.Configuration"/>
    <![CDATA[
    public string LinkFile()
    {
         string link = System.Configuration.ConfigurationManager.AppSettings["fileUrl"];
         return link;
    }
    ]]>
</msxsl:script>

<xsl:template name="GenerateLinkFile">
    <xsl:param name="fileName"/>
    <xsl:param name="fileId"/>
    <xsl:choose>
        <xsl:when test="$fileName = ''">
            <xsl:value-of select="$fileName"/>
        </xsl:when>
        <xsl:otherwise>
            <a href="files:LinkFile()">
                <xsl:value-of select="$fileName"/>
            </a>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>

The error I'm getting is as follows at runtime when it tries to generate the hyperlink: System.Xml.Xsl.XslLoadException: Type 'System.Xml.Xsl.CompiledQuery.Script1' already defines a member called 'LinkFile' with the same parameter types.

Upvotes: 0

Views: 858

Answers (1)

dash
dash

Reputation: 91480

I ran your XSLT against a sample XML file and it ran well; this led me to believe you are probably calling this XSLT multiple times from other XSLT files.

The best way to handle this is that, if you have a root transform calling other transforms, to include it from there, so it is only referenced once; the aim is to ensure that the function is only included once throughout your transforms, otherwise you will encounter the error you are seeing.

Alternatively, call this transformation independently - a common approach is to apply XSLT's to the source document in turn, performing sets of transformations one at a time.

Upvotes: 3

Related Questions