【问题标题】:Dynamic ASP.NET application compilation动态 ASP.NET 应用程序编译
【发布时间】:2010-08-01 11:39:29
【问题描述】:

我的 Web 应用程序(ASP.NET v3.5 / C#)动态创建其他 asp.net 应用程序(创建 aspx、aspx.cs、类、web.config、project.csproj 文件等)。

即使在 IIS 中将“新”应用程序文件夹配置为 APPLICATION 后,当我尝试浏览它时,仍会收到以下解析器错误:Could not load type 'Template48.Template48'(其中 Template48 是我的应用程序)。

当我手动浏览到新的应用程序文件夹并重新构建它时,一切正常。

我怎样才能重新编译这个整个应用程序,但在它的文件夹中?

提前致谢,

加。

【问题讨论】:

  • 你是什么意思在它的文件夹中?您目前没有运行 csc 吗?

标签: c# asp.net dynamic-compilation


【解决方案1】:

Web 应用程序需要在运行之前进行编译;这与网站不同。

仅提供来源是不够的;实际上,ASP.NET 不需要源 (aspx.cs) 来运行应用程序,只需要 .aspx、web.config 和 .dll 文件(.NET 术语中的“程序集”)。甚至认为从生产系统中删除源代码以避免意外泄露源代码并为攻击者提供有关网站内部运作的信息是一种很好的做法。

要完成这项工作,您需要以某种方式调用命令行 C# 编译器来动态构建项目;这将生成所需的 .dll 文件。

一个不同但更难的方法是使用 .NET 在运行时发出 IL 的能力;使用此工具,您可以直接生成程序集,而无需通过编译器。不过,这非常困难,您需要彻底了解 IL 才能实现这一目标。

【讨论】:

  • 感谢您的评论!在我的应用程序的其他代码中,我确实通过动态编译创建程序集,但在这种情况下不同的是,这里我需要编译一个整个项目。是否可以?还是我应该遍历所有 .cs 文件?谢谢。
  • 一个快速的谷歌给了我一个论坛帖子作为第一个结果,这导致了微软的这个有趣的阅读:msdn.microsoft.com/en-us/library/168k2ah5%28vs.71%29.aspx
猜你喜欢
  • 2010-10-16
  • 2012-01-31
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
相关资源
最近更新 更多