我正在使用 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/