c# - 在浏览器中打开大型 aspx 文件时编译错误 CS1647

标签 c# asp.net xml xslt webforms

我正在使用 XML/XSLT 创建一个可以变得非常大的 aspx 页面。即使文件创建成功,当文件大小接近 300K 时,在浏览器(IE 和 Chrome 都试过)中打开文件时出现错误:“CS1647: An expression is too long or complex to compile”。失败的 .NET 错误页面上没有显示其他有用信息。

我的开发环境是 Win7 x64 笔记本电脑上的 VS 2012 Express for Web。

由于在程序执行过程中没有出现这个问题,所以我不知道如何解决这个问题。任何人都可以提出解决此问题的策略或解决方法吗?

编辑

用于创建aspx页面的C#代码是

// load the xml file
XmlDocument reportDetails = new XmlDocument();
reportDetails.Load(ReportDetailsPath);
//setup the xslt transform
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(XlsRptPath);
StringWriter sw = new StringWriter();
xslt.Transform(ReportDetails, null, sw);
//create the aspx file
using (StreamWriter outfile = new StreamWriter(aspxPath))
{
    outfile.Write(sw.ToString());
}

最佳答案

老问题,大部分在评论中回答。但为了完整起见,让我们回答它;)。您的问题不在于 XSLT 本身,而在于生成的文件 hits the 300k boundary of maximum expression size in C# .您可以做几件事:

  • 使生成的代码低于 300k(但这在您的情况下可能是不可能的)
  • 在生成的代码中获取任何字符串常量并将它们放在 资源文件。此类资源文件的格式为 XML,您可以 自动生成它,只需确保资源中的 ID 与 您在生成的 ASPX 中使用的 ID
  • 将部分生成的代码放在代码隐藏文件中。一个 ASPX 是 解析为一个表达式,但代码隐藏不是。这是一个 构建生成的代码的问题。
  • 如果您的设计允许,将 ASPX 拆分为多个页面。你可以 将它们与 iframe 重新组合。
  • 在多个 ASCX 控件中拆分 ASPX 文件。这也许是 最自然的事情。可以引用/添加每个 ASCX 控件 到 ASPX 文件。每个 ASCX 控件不应超过 300k 的限制。
  • 如果有很多生成的 CSS 会放大尺寸,请将其放置 在单独的 CSS 文件中。
  • 如果图像引用中有很多长的绝对路径并且 比如,你可以折叠它们并使引用成为相对的,即通过 使用 <base> ,这可能会为您节省一些空间。
  • 如果错误是由实际的大(常量)表达式引起的,请考虑 hints in the answers in this post寻求解决方案。

关于c# - 在浏览器中打开大型 aspx 文件时编译错误 CS1647,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14184543/

相关文章:

c# - Go to Href <a href =""> From .Cs 文件函数

c# - 为什么 IDataReader 丢失一行?

c# - Image.FromFile 为什么读取位图比读取 jpeg 文件快

c# - 存储库中的错误处理 (API REST)

c# - MVC windows 身份验证在项目属性中变灰(变灰)

asp.net - SMTP异常 : Server does not support secure connections

asp.net - SignalR 协商 SSE,但也使用长轮询?

sql-server - SQL 中的 XML 帮助

xml - 当子节点满足一定条件时移除 XML 节点

xml - 使用 xslt unix 将 xml 转换为简单文件