I have a working web application that was written using the .NET Framework 1.1. I am trying to recompile it using .NET 2.0 and VS 2005 without updating any of the deprecated or obsolete api calls. It compiles without errors - but fails when attempting to render an XML control. I can find no documentation for System.Web.UI.Control.ResolvePhysicalOrVirtualPath anybody got any ideas what the problem is
Thanks
Nigel
Object reference not set to an instance of an object.
at System.Web.UI.Control.ResolvePhysicalOrVirtualPath(String path, VirtualPath& virtualPath, String& physicalPath)
at System.Web.UI.WebControls.Xml.LoadTransformFromSource()
at System.Web.UI.WebControls.Xml.Render(HtmlTextWriter output)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Control.Render(HtmlTextWriter writer)
at MCMS.Rapid.Controls.Cms.CmsXmlContentBase.Render(HtmlTextWriter writer) in C:\RapidSource\MCMS.Rapid.Controls\Cms\CmsXmlContentBase.cs:line 58
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Page.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Converting Web Application from 1.1 to 2.0
Wil Burton
Nigel, it looks like you're caching the HtmlTextWriter for a control in ASP.NET cache. Caching controls, writers, or other parts of controls isn't a supported ASP.NET scenario and can lead to many other unexpected side effects. The best thing to do is to use Output Caching for caching pages or Partial Caching for caching controls on pages. These scenarios have been tested well and are supported code paths.
I hope this doesn't derail your project too much, and I hope that one of our supported caching solutions works for you.
Polita
paso
This looks like a bug in XML control. I'll try to find more infor.
Nick...A
Pradeep Gupta
Nigel, can you provide us with more information on your scenario A repro case is best, but a description of how you're using the Xml control will help too. It looks like you're calling a custom render class (CmsXmlContentBase.Render). Can you describe what it's doing
Thanks,
Polita Paulus
ASP.NET Development Team
Cris001
Hi Guys
Thanks for helping.
Here is the render code... The failure is at the base.Render( writer); line.
The class (eventually) inherits :- System.Web.UI.UserControl
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (_CacheContent && !(bool)_CachingOff)
{
System.IO.TextWriter tw = (System.IO.TextWriter)System.Web.HttpContext.Current.Cache[CacheKey];
if (tw == null)
{
tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter html = new System.Web.UI.HtmlTextWriter(tw);
RenderChildren(html);
try
{
System.Web.HttpContext.Current.Cache.Add(CacheKey, tw, null, DateTime.Now.AddMinutes(int.Parse(_CachePeriod)), TimeSpan.Zero,System.Web.Caching.CacheItemPriority.Low, null) ;
}
catch (Exception ex)
{
Logging.Log(new Exception("Unable to Cache control: " + this.GetType().ToString(), ex));
}
}
else if (CmsContext.ExtendedTrace) Logging.Trace("Using cached content: " + this.GetType().ToString());
writer.Write(tw.ToString());
}
else
base.Render(writer);
}
The control is added to the page by :- idXml = AddXmlControl();
This is where we set up the control :-
if (_PathToXslt != "" && _PathToXslt != null)
{
if (_PathToXslt.ToLower() == "showxml")
idXml.Transform = ShowXmlXslt;
else
{
if (System.IO.File.Exists(Server.MapPath(XsltTemplatePrefix + XsltTemplatePath)))
idXml.TransformSource = XsltTemplatePrefix + XsltTemplatePath;
else
{
Logging.Log(Server.MapPath(XsltTemplatePrefix + XsltTemplatePath) + " - File not found");
idXml.Transform = LoadXsltTransform("XsltNotfound");
}
}
}
else
{
if (_XsltDocument == null)
_XsltDocument = GetDefaultXslt();
idXml.Transform = _XsltDocument;
}
idXml.Document = Document;
.....
protected virtual XslTransform LoadXsltTransform(string XsltName)
{
XslTransform t = new XslTransform();
XmlTextReader oRdr = new XmlTextReader(Resources.GetResourceStream("CmsControls.Xslt." + XsltName + ".xslt"));
t.Load(oRdr, null, null);
oRdr.Close();
return t;
}
protected virtual XslTransform ShowXmlXslt
{
get
{
string sShowXmlPath = (string)CmsApplication.Current.Settings["XXXX.System.Development.ShowXmlXslt", "string"];
if (sShowXmlPath != "")
{
System.Xml.Xsl.XslTransform oTrans = new XslTransform();
oTrans.Load(Server.MapPath(sShowXmlPath));
return oTrans;
}
try
{
if ((bool)CmsApplication.Current.Settings["XXXX.System.Development.ShowXmlIE", "bool"] == true)
return LoadXsltTransform("ShowXmlIE");
else
return LoadXsltTransform("ShowXml");
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
return null;
}
}
protected virtual XslTransform GetDefaultXslt()
{
return ShowXmlXslt;
}
I hope this helps...
Thanks
Nigel