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

标签 c# asp.net xml xslt webforms

我正在使用 XML/XSLT 创建一个可以变得非常大的 aspx 页面。即使文件创建成功,当文件大小接近300K时,在浏览器中打开文件时会出现错误:“CS1647: An expression is too long or complex to compile”(IE和Chrome都试过)。失败的 .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/

    相关文章:

    asp.net - 将MS图表导出为PDF和Excel

    android - 如何在Android中将两个 View 放置在某个坐标上,彼此重叠?

    java - SearchView 不启动 SearchableActivity

    asp.net - 如何更改asp.net web api中的默认路由

    android - Navigation Drawer 用另一个有问题地保留抽屉选项的 fragment 替换 fragment

    c# - 如何在 C# 中使用 LINQ 方法或查询表达式检索最后 5 条记录

    c# - 显示表中属于学校的学生

    c# - 我的哈希值错误? C#密码学

    c# - 如何使用JSON.Net解析?

    c# - 带有是否按钮的 JavaScript 警报