title: How to migrate from XslTransform to XslCompiledTransform
body: <p>I have the following code that I need to migrate from VS 2003 (.Net 1.1) to VS 2008 (.Net 2+)
  but I get compilation error -</p>
  
  <p>System.Xml.Xsl.XslTransform' is obsolete: This class has been deprecated. 
  I probably need to use System.Xml.Xsl.XslCompiledTransform instead.
  but I do not find the matching Load() and Transform() overload versions that I can use with all the parameters of my original code.</p>
  
  <p>in MSDN [How to: Migrate Your XslTransform Code] I only found some simpler cases.
  <a href="http://msdn.microsoft.com/en-us/library/aa983475%28VS.80%29.aspx" rel="noreferrer">http://msdn.microsoft.com/en-us/library/aa983475%28VS.80%29.aspx</a>
  but in my code I see some remarks that hints that the added parameters were used to avoid exceptions, so I prefer to use these parameters.</p>
  
  <p>Can someone please help migrating this code?</p>
  
  <p>Thanks,
  Atara</p>
  
  <pre><code>' ----------------------------------------------------------------------   
  ' VS 2003 code:
  ' ----------------------------------------------------------------------
  
  . . .
  
  Dim myXslDoc As Xml.XmlDocument
  
  ' ----------------------------------------------------------------------   
    Public Sub mcSetParameters(ByVal srcFileName As String)
  ' ----------------------------------------------------------------------
  
   Me.myXslDoc = New Xml.XmlDocument 
   Me.myXslDoc.Load(srcFileName) 
  
  End Sub
  
  
  ' ----------------------------------------------------------------------    
    Public Sub mcSetHtml()
  ' ----------------------------------------------------------------------
  
   Dim oXPathNav As System.Xml.XPath.XPathNavigator = xmlDoc.DocumentElement.CreateNavigator()
  
   Dim sbContent As New System.Text.StringBuilder
   Dim swContent As New System.IO.StringWriter(sbContent)        
  
   Dim args As New System.Xml.Xsl.XsltArgumentList
   args.AddParam("paramName1", "", paramVal1.ToString)
   args.AddParam("paramName2", "", paramVal2.ToString)
  
   Try
     ' Try to avoid "Invalid site" exception, by using XmlUrlResolver and Evidence.
     ' If the XSLT stylesheet . . . comes from a code base that you trust, Then use Me.GetType().Assembly.Evidence() 
     Dim resolver As System.Xml.XmlUrlResolver = New System.Xml.XmlUrlResolver
     resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
     Dim xslt As System.Xml.Xsl.XslTransform = New System.Xml.Xsl.XslTransform 
     xslt.Load(Me.myXslDoc, resolver, Me.GetType().Assembly.Evidence())        
     xslt.Transform(oXPathNav, args, swContent, Nothing)                       
   Catch ex As Exception
     Debug.WriteLine("Exception: {0}", ex.ToString())
   End Try
  
   DoSomething(sbContent.ToString())
  
  End Sub
  
  ' ----------------------------------------------------------------------
  </code></pre>
  
  <p>in my old code I have both xmlDoc and xslDoc, so the compiled code I have now (not tested yet) is:</p>
  
  <p>' ----------------------------------------------------------------------<br>
  ' VS 2008 trial code:</p>
  
  <p>' ----------------------------------------------------------------------</p>
  
  <pre><code>  Dim sbContent As System.Text.StringBuilder = New System.Text.StringBuilder()
    Dim swContent As System.IO.StringWriter = New System.IO.StringWriter(sbContent)
    Dim contentWriter As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(swContent)
  
    Dim args As New System.Xml.Xsl.XsltArgumentList()
    args.AddParam("paramName1", "", paramVal1.ToString)
    args.AddParam("paramName2", "", paramVal2.ToString)
  
    Try
      Dim resolver As New System.Xml.XmlUrlResolver
      resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
  
      Dim evidence As System.Security.Policy.Evidence = Me.GetType().Assembly.Evidence
      Dim secureResolver As New System.Xml.XmlSecureResolver(resolver, evidence)
      Dim settings As New System.Xml.Xsl.XsltSettings(False, True)
  
      Dim xslt As New System.Xml.Xsl.XslCompiledTransform()  
      xslt.Load(Me.myXslDoc, settings, secureResolver)    
      xslt.Transform(xmlDoc, args, contentWriter)  
    Catch ex As Exception
      Debug.WriteLine("Exception: {0}", ex.ToString())
    End Try
  
    DoSomething(sbContent.ToString())
  </code></pre>