ASP.NET 中的网站或 Web 应用程序
Posted
技术标签:
【中文标题】ASP.NET 中的网站或 Web 应用程序【英文标题】:Web Site or Web Application in ASP.NET 【发布时间】:2010-09-10 02:07:29 【问题描述】:哪个 Visual Studio 模板应该用于 ASP.NET 网站、网站模板或项目 | Web 应用程序模板?
【问题讨论】:
【参考方案1】:您最好阅读以下内容: http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx 在我看来,这取决于你正在开发什么
【讨论】:
【参考方案2】:两者的功能和性能相似,但在以下方面仍有区别:
网络应用:
我们不能在单个 Web 应用程序中包含 C# 和 VB 页面。 我们可以设置多个项目之间的依赖关系。 如果不重新编译,部署后无法编辑单个文件。 企业环境的正确选择,在这种环境中,多个开发人员协同工作以进行创建、测试和部署。网站:
可以在单个网站中混合使用 VB 和 C# 页面。 无法建立依赖关系。 部署后编辑单个文件。 一个开发人员负责创建和管理整个网站的正确选择。【讨论】:
当我创建 Web 应用程序并在位置输入“localhost/MyWebApp”。 “确定”被禁用。 ny1 可以帮我解决这个问题吗 VS 2008-> 文件 -> 新建项目 -> C# 或 VB -> Web -> 选择模板 ASP.Net Web 应用程序 -> 键入 localhost/WebApp 禁用“确定”按钮【参考方案3】:Web 应用项目的工作方式更像是一个传统的 VS 项目,有一个项目文件,一步编译完成。
网站项目更像经典的 ASP 或 php 站点。没有项目文件(引用存储在解决方案文件中),页面在服务器上动态重新编译。网站的好处是您可以通过 ftp 访问服务器并在文本编辑器中更改文件。你不需要VS。不过,有些人可能讨厌这样。
这可能取决于您的背景。如果您习惯于 ASP 或 PHP 风格的开发,网站项目对您来说似乎更自然。如果您有传统的应用程序开发人员背景,Web 应用程序项目看起来会更自然。
【讨论】:
【参考方案4】:如果您使用 Team Foundation Server 进行源代码控制,您可能必须使用 Web 应用程序项目,因为您需要一个 .csproj 文件。
更多细节来自 Jeff Atwood 本人:Web Site Projects vs. Web Application Projects
由于缺少包含项目信息和元数据的物理文件,Web 站点 web 项目在 Team System 中尤其痛苦。例如,无法在网站项目中签入代码分析规则,因为代码分析规则完全存储在客户端!
【讨论】:
【参考方案5】:我更喜欢网站。网站是目录中文件的集合。它变得更加便携和可部署。 Web 应用程序通过项目文件解决了这个问题。
【讨论】:
【参考方案6】:我个人现在专门使用 Web 应用程序项目。由于网站的编译时间,我实际上将一个相当网站转换为 Web 应用程序。
我还使用预构建事件来移动特定于配置的配置文件,并且预构建和构建后事件在网站中不可用。
【讨论】:
【参考方案7】:在 Visual Studio 2015 中,与 Web 应用程序项目相比,我更喜欢网站项目。我仍然使用 Visual Studio,因为您获得了 Nuget Packaging,您可以将 nuget 包安装到这两种类型的项目中。
然而,网站项目没有项目文件,您实际上只是在解决方案中添加一个文件夹。
但是您仍然可以拥有代码,但我更愿意将其放在单独的项目中。
在 WebApp 项目中,您的资产、Css、视图(razor、aspx 等)、控制器/代码隐藏等都在一个项目中,它们只是混合在一起。我更喜欢将网站分成两半。前端(css、js、图片、“html/cshtml/aspx/ashx/.master/etc”)和后端(所有代码)。
所以我创建了一个网站项目和一个与之配套的类库(在 Visual Studio 中,您可以添加对网站项目的引用)。我将我的类库添加为依赖项,所有代码都在类库中。你仍然可以拥有一个 global.asax,你只需要告诉它后面的代码在另一个 dll 中(不是网站将编译到的那个)。 MVC 视图,您只需像正常一样指定名称空间(dll 是引用,因此名称空间就在那里)。而在 WebForms 中,您只需记住将程序集名称与代码所在的类型引用一起包含在内。
习惯起来有点乏味,但是当你有独立的结构时,一切都在一个有意义的地方,并且以易于维护的方式模块化。
另外,由于网站只是一个文件夹(没有项目文件),它可以在 Visual Studio Code 中轻松打开,其他流行的文本编辑器使设计人员可以轻松地处理 css/js/图像等(不在代码项目中)。将图层设计人员分开,设计人员可以看到他们需要看到的内容。
现在结构明智。我使用 Tortoise SVN 和 Visual SVN(java/.net 商店)将我的代码保存在我的机器上检入 subversion 存储库。为了在本地进行测试,我安装了 IIS,并在本地的 IIS 中设置了网站项目,就像在 dev/prod 服务器上一样。
然后我在 dev/prod 服务器上安装 MSDeploy,并在 Visual Studio 中通过 MSDeploy 使用发布 Web 应用程序功能,并使用 web.config 转换。所以我对 dev 和 prod 进行了 web.config 转换,没有转换的主要 web.config 用于本地测试(因此它适用于项目中的所有开发人员)。
对于前面所说的缺点:拥有一个 WebSite 项目与一个 WebApp 项目并不意味着多个开发人员不能在它上面工作,只有当你的 WebSite 项目在某个服务器上的某个地方并且你直接从那里加载它时将是不好的做法。
您可以像对待任何其他 Visual Studio 项目、本地代码、源代码管理、多个开发人员一样对待网站项目。
最后一点,分离代码的另一个好处是您可以将所有代码放在一个共享项目中。然后你可以为你可能做的每个端口创建一个类库,比如说一个在直接的 .net 4.6 上,另一个在 .net core 5 上,并链接到你的共享项目中。只要您的代码与两者兼容,它就会构建并且您没有任何重复的代码文件。
【讨论】:
以上是关于ASP.NET 中的网站或 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET 网站(不是 Web 应用程序)中的用户控件获取父页面
ASP.NET Core Web API 应用程序是不是可能出现死锁或应用程序挂起状态