Unexpected error writing metadata to file '' --
Not enough storage is available to complete this operation.
错误,并在运行时出现此错误消息,如下所示:
Exception information:
Exception type: HttpException
Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
我真的不明白为什么他们在Visual Studio 2005中放弃了Web应用程序,用于引起疼痛,排除健全, 生产环境 力笨拙的网站项目类型 .
1
Web Site 是您部署到ASP.NET Web服务器(如IIS)的内容 . 只是一堆文件和文件夹 . 网站中没有任何内容可以将您与Visual Studio联系起来(没有项目文件) . 代码生成和网页编译(例如.aspx,.ascx,.master)完成dynamically at runtime,框架检测到这些文件的更改并自动重新编译 . 您可以将您想要的代码share between pages放在特殊的App_Code文件夹中,也可以预编译它并将程序集放在Bin文件夹中 .
Web Application 是一个特殊的Visual Studio项目 . The main difference with Web Sites is that when you build the project all the code files are compiled into a single assembly, which is placed in the bin directory. You don’t deploy code files to the web server. 您可以将它们放在任何位置,而不是像在类库中那样放置共享代码文件的特殊文件夹 . 由于Web应用程序包含不打算部署的文件(例如项目和代码文件),因此Visual Studio中有一个Publish命令可将Web站点输出到指定位置 .
25 回答
在Web应用程序中,您可以创建项目功能的各个层,并通过将它们划分为多个项目来创建它们之间的相互依赖关系,但您永远不能在网站上执行此操作 .
Web应用程序需要更多内存,大概是因为您别无选择只能编译成单个程序集 . 我刚刚将一个大型遗留站点转换为Web应用程序,并且在编译时出现内存不足的问题,并显示如下错误消息:
错误,并在运行时出现此错误消息,如下所示:
我建议在内存受限的旧硬件上转换大型网站,选择恢复为网站模型的选项 . 即使在最初的成功问题可能会在以后蔓延 .
Web Site =网站由图形设计师创建时使用,程序员只编辑一页或两页
Web Application =在程序员创建应用程序时使用,图形设计人员只编辑一个或两个分页/图像 .
网站可以使用任何HTML工具而无需开发人员工作室,因为项目文件不需要更新等 . 当团队主要使用开发人员工作室并且代码内容很高时,Web应用程序是最好的 .
(编译时在Web应用程序中发现了一些编码错误,这些错误在运行时之前在网站中找不到 . )
Warning: I wrote this answer many years ago and have not used Asp.net since. I expect things have now moved on.
Project structure 项目结构也存在差异 . 在Web应用程序中,您有一个项目文件,就像在普通应用程序中一样 . 在网站上没有传统的项目文件,你只有解决方案文件 . 所有引用和设置都存储在web.config文件中 . @Page directive @Page指令中有一个不同的属性,用于包含与此页面关联的类的文件 . 在Web应用程序中,它是标准"CodeBehind",在网站中使用"CodeFile" . 您可以在以下示例中看到:
Web Application:
Web Site:
是的Web应用程序比Web站点要好得多,因为Web应用程序为我们提供了自由:
在一个保护伞下拥有多个项目并 Build 项目之间的依赖关系 . 例如 . 对于PCS我们可以在Web应用程序中有以下内容 -
门户网站
通知控制器(用于发送电子邮件)
业务层
数据访问层
异常管理器
服务器实用程序
WCF服务(适用于所有平台)
列出项目
对与ASP.NET页面关联的类文件中的代码运行单元测试
引用与独立类中的页面和用户控件关联的类
为 . 创建单个程序集整个网站
控制为站点生成的程序集名称和版本号
避免将源代码放在 生产环境 服务器上 . (您可以避免将源代码部署到IIS服务器 . 在某些情况下,例如共享托管环境,您可能会担心在IIS服务器上未经授权访问源代码 . (对于网站项目,您可以通过以下方式避免此风险:在开发计算机上进行预编译并部署生成的程序集而不是源代码 . 但是,在这种情况下,您将失去轻松站点更新的一些好处 . )
网站性能问题(对网站的第一次请求可能需要编译网站,这可能会导致延迟 . 如果网站运行在内存不足的IIS服务器上,包括整个网站单个程序集可能会使用比多个程序集所需的内存更多的内存 . )
WebSite : 它自动生成app_code文件夹,如果您在服务器上发布它,之后如果您在任何特定文件或页面中进行某些更改,则不必编译所有文件 .
Web Application 它自动生成解决方案文件,哪个网站不会生成,如果您更改了一个文件,则必须编译完整项目以反映其更改 .
Website:
Web站点项目即时编译 . 你最终得到了更多的DLL文件,这可能很痛苦 . 当您在一个目录中有页面或控件需要引用另一个目录中的页面和控件时,它也会出现问题,因为其他目录可能尚未编译到代码中 . 另一个问题可能是出版 .
如果没有告诉Visual Studio不断重复使用相同的名称,它将为页面始终生成的DLL文件提供新名称 . 这可能会导致包含相同类名的DLL文件的几个密切副本,这将产生大量错误 . Web站点项目是在Visual Studio 2005中引入的,但事实证明它并不是非常受欢迎 .
Web Application:
Web应用程序项目是作为加载项创建的,现在作为Visual Studio 2005的SP 1的一部分存在 . 主要区别在于Web应用程序项目的工作方式类似于Visual Studio 2003附带的Web项目 . 它将在构建时将应用程序编译为单个DLL文件 . 为了更新项目,必须重新编译它并发布DLL文件以进行更改 .
Web应用程序项目的另一个不错的功能是从项目视图中排除文件要容易得多 . 在“网站”项目中,您排除的每个文件都使用文件名中的excluded关键字重命名 . 在Web应用程序项目中,项目只是跟踪项目视图中包含/排除的文件而不重命名,使事情更加整洁 .
Reference
文章ASP.NET 2.0 - Web Site vs Web Application project也说明了为什么使用一个而不是另一个的原因 . 以下是它的摘录:
Web Application Projects versus Web Site Projects(MSDN)解释了网站和Web应用程序项目之间的差异 . 此外,它还讨论了在Visual Studio中进行的配置 .
“网站”将其代码放在特殊的App_Code目录中,并在运行时将其编译为多个DLL(程序集) . “Web应用程序”预编译为一个DLL .
这可能听起来有点明显,但我认为这是一个被误解的东西,因为Visual Studio 2005最初只附带了网站 . 如果您的项目涉及的网站相当有限且没有很多逻辑或物理上的分离,那么该网站就可以了 . 但是,如果它是真正的Web应用程序,其中包含许多用户添加和更新数据的不同模块,那么您最好使用Web应用程序 .
网站模型最大的专业是
app_code
部分中的任何内容都是动态编译的 . 您可以在没有完全重新部署的情况下进行C#文件更新 . 然而,这是一个巨大的牺牲 . 许多事情发生在难以控制的封面之下 . 命名空间很难控制,默认情况下,对于app_code
下的任何内容,特定的DLL使用都会超出窗口,因为所有内容都是动态编译的 .Web应用程序模型没有动态编译,但您可以获得控制权在我提到的事情上 .
如果您正在进行n层开发,我强烈推荐Web应用程序模型 . 如果您正在进行有限的网站或快速而肮脏的实施,则网站模型可能具有优势 .
更详细的分析可以在:
Web Application Projects and Web Deployment Projects are here
Web Site or Web Application?
网站和项目>>网站是使用visual studio创建ASP.NET应用程序的两种不同方法 . 一个是无项目的,另一个是项目环境 . 差异如下
解决方案文件与项目环境中的根目录存储在同一目录中 .
需要在项目环境中部署之前删除解决方案和项目文件 .
完整的根目录部署在无项目环境中 .
使用这两种方法没有太大的区别 . 但是,如果您要创建需要更长时间的网站,请选择项目环境 .
除非您特别需要动态编译的项目,否则 don't use a web site project .
为什么?因为在尝试更改或了解您的项目时,网站项目会引起您的反响 . Visual Studio中的静态类型查找功能(例如查找用法,重构)将永远占用任何合理大小的项目 . 有关详细信息,请参阅Stack Overflow问题Slow “Find All References” in Visual Studio .
我真的不明白为什么他们在Visual Studio 2005中放弃了Web应用程序,用于引起疼痛,排除健全, 生产环境 力笨拙的网站项目类型 .
Web Site 是您部署到ASP.NET Web服务器(如IIS)的内容 . 只是一堆文件和文件夹 . 网站中没有任何内容可以将您与Visual Studio联系起来(没有项目文件) . 代码生成和网页编译(例如.aspx,.ascx,.master)完成dynamically at runtime,框架检测到这些文件的更改并自动重新编译 . 您可以将您想要的代码share between pages放在特殊的App_Code文件夹中,也可以预编译它并将程序集放在Bin文件夹中 .
Web Application 是一个特殊的Visual Studio项目 . The main difference with Web Sites is that when you build the project all the code files are compiled into a single assembly, which is placed in the bin directory. You don’t deploy code files to the web server. 您可以将它们放在任何位置,而不是像在类库中那样放置共享代码文件的特殊文件夹 . 由于Web应用程序包含不打算部署的文件(例如项目和代码文件),因此Visual Studio中有一个Publish命令可将Web站点输出到指定位置 .
App_Code vs Bin
部署共享代码文件通常是个坏主意,但这并不意味着您必须选择Web应用程序 . 您可以拥有一个引用类库项目的Web站点,该项目包含Web站点的所有代码 . Web应用程序只是一种方便的方法 .
CodeBehind
本主题特定于.aspx和.ascx文件 . 在不使用代码隐藏文件的ASP.NET MVC和ASP.NET Web页面等新应用程序框架中,此主题越来越不相关 .
通过将所有代码文件编译为单个程序集(包括.aspx页面和.ascx控件的codebehind文件),在Web应用程序中,您必须为每个小的更改重新构建,并且您无法进行实时更改 . 这在开发过程中可能是一个真正的痛苦,因为您必须不断重新构建以查看更改,而运行时检测到Web站点更改并自动重新编译页面/控件 .
让运行时管理代码隐藏程序集对您来说工作较少,因为您不必担心为页面/控件提供唯一名称,或者将它们组织到不同的名称空间中 .
我不是说部署代码文件总是一个好主意(特别是在共享代码文件的情况下),但代码隐藏文件应该只包含执行UI特定任务的代码,连接事件处理程序等 . 您的应用程序应该是分层,以便重要的代码总是在Bin文件夹中 . 如果是这种情况,那么部署代码隐藏文件不应被视为有害 .
Web应用程序的另一个限制是您只能使用项目的语言 . 在网站中,您可以在C#中使用某些页面,在VB中使用某些页面等 . 不需要特殊的Visual Studio支持 . 这就是构建提供程序可扩展性的美妙之处 .
此外,在Web应用程序中,您不会在页面/控件中进行错误检测,因为编译器只编译您的代码隐藏类而不是标记代码(在MVC中您可以使用MvcBuildViews选项修复此问题),这是在运行时编译的 .
Visual Studio
由于Web应用程序是Visual Studio项目,因此您将获得Web站点中不具备的一些功能 . 例如,您可以使用构建事件来执行各种任务,例如缩小和/或组合Javascript文件 .
Visual Studio 2010中引入的另一个不错的功能是Web.config transformation . 这在网站中也不可用 . 现在可以在VS 2013中使用网站 .
构建Web应用程序比构建Web站点更快,特别是对于大型站点 . 这主要是因为Web应用程序不编译标记代码 . 在MVC中如果你将MvcBuildViews设置为true则为它编译标记代码并获得错误检测,这非常有用 . 不好的一面是,每次构建解决方案时,它都会构建完整的站点,这可能会很慢且效率低下,特别是如果您不编辑站点 . 我发现自己打开和关闭MvcBuildViews(这需要一个项目卸载) . 另一方面,使用网站,您可以选择是否要将网站构建为解决方案的一部分 . 如果您选择不这样做,那么构建解决方案的速度非常快,如果您进行了更改,则可以始终单击“网站”节点并选择“生成” .
在MVC Web应用程序项目中,您可以使用额外的命令和对话框来执行常见任务,例如“添加视图”,“转到视图”,“添加控制器”等 . 这些在MVC网站中不可用 .
如果使用IIS Express作为开发服务器,则可以在“网站”中添加虚拟目录 . Web应用程序中不提供此选项 .
NuGet包还原在网站上不起作用,您必须手动安装在packages.config上列出的包 . 包恢复现在适用于网站starting NuGet 2.7
这里的Web支持应用程序是网站的一个例子 . 网站和Web应用程序都可以是动态/静态的,它取决于要求,这里是一个了解网站和Web应用程序工作的示例 .
其中一个主要区别是网站动态编译并创建即时组件 . Web应用程序编译成一个大型程序集 .
在Visual Studio 2008中已经完成了两者之间的区别 .
网站 - 不会创建任何解决方案文件 . 如果我们想创建不需要Visual Studio的网站 .
Web应用程序 - 将创建解决方案文件 . 如果我们要创建Web应用程序,则需要Visual Studio . 它将在bin文件夹中创建一个
.dll
文件 .来自MCTS自学培训套件考试70-515书:
绝对是Web应用程序,单个DLL文件,易于维护 . 但是网站更灵活;你可以随时编辑aspx文件 .
应用程序通常在部署之前编译,因为网站使用app_code目录 . 当应用程序代码文件夹中的任何更改时,服务器将重新编译代码 . 这意味着您可以随时添加/更改网站代码 .
应用程序的优点是没有重新编译,因此初始启动时间会更快 .
我建议你观看ASP.NET网站上的视频Web Application Projects & Web Deployment Projects,它详细解释了它的不同之处,对我来说非常有帮助 .
顺便说一句,不要对 Headers 感到困惑,视频的很大一部分解释了网站项目和Web应用程序项目之间的区别以及Microsoft为何在Visual Studio 2005中重新引入Web应用程序项目(正如您可能已经知道的那样)最初只附带网站项目,然后在SP1中添加了Web应用程序项目) . 对于想要了解差异的人,我强烈推荐一个很棒的视频 .
Web Application project model
Web Site project model
没有项目文件(基于文件系统) .
新编译模型 .
动态编译和处理页面而不在每个页面视图上构建整个站点 .
支持IIS和内置的ASP.NET开发服务器 .
每个页面都有自己的程序集 .
不同的代码模型 .
这取决于你正在开发什么 .
面向内容的网站的内容会经常变化,网站会更好 .
应用程序往往将其数据存储在数据库中,其页面和代码很少发生变化 . 在这种情况下,最好有一个Web应用程序,其中组件的部署受到更多控制,并且对单元测试有更好的支持 .
总结一下上面的一些答案:
Flexibility ,可以你可以对网页进行实时更改吗?
网站:可能 . 亲:短期利益 . 骗局:项目混乱的长期风险 .
Web App:Con:不可能 . 编辑页面,将更改存档到源控件,然后构建和部署整个站点 . 亲:保持优质项目 .
Development issues
网站:没有.csproj文件的简单项目结构 . 两个.aspx页面可能具有相同的类名而没有冲突 . 随机项目目录名称导致构建错误,如why .net framework conflicts with its own generated file和why .net framework conflicts with its own generated file . 亲:简单(简单) . 骗局:不稳定 .
Web App:类似于WebForms项目的项目结构,带有.csproj文件 . asp页面的类名必须是唯一的 . 亲:简单(聪明) . Con:none,因为Web应用程序仍然很简单 .
它始终取决于您的客户的要求 . ASP.NET只包含用户安全性和易于维护应用程序所需的灵活功能 .
您可以将 Web application 视为在ASP.NET框架内运行的二进制文件 . 并且 Web sites 作为静态网页,您可以查看并轻松部署源代码 .
但是这两种ASP.NET技术的优点和缺点都是有益的 .
MSDN中有一篇文章描述了这些差异:
Comparing Web Site Projects and Web Application Projects
顺便说一句:关于这个话题有一些类似的问题,例如:
Web Site vs. ASP.Net Web Application in Visual Studio注意:已删除,不再在SO上
website or webapplication in.ASP.NET
在Web应用程序项目中,Visual Studio需要用于页面和用户控件的其他.designer文件 . 网站项目不需要这种开销 . 标记本身被解释为设计 .