【问题标题】:why bin folder not exists inside wwwroot in my project?为什么我的项目的 wwwroot 中不存在 bin 文件夹?
【发布时间】:2016-03-31 08:43:52
【问题描述】:

我在 Visual Studio 2015 中创建了空项目 asp.net 5。

如下图:

据我从一些教程中了解到,bin 文件夹必须位于 wwwroot 内。

但是 wwwroot 中没有 bin,而且 Sensor Observation 项目中的任何地方都不存在 bin 文件夹。

知道为什么我的项目中的 wwwroot 中不存在 bin 文件夹吗?

【问题讨论】:

  • 我怀疑这些教程指的是根文件夹 ASP.NET 4 和更早版本,而不是 ASP.NET 5。在 ASP.NET 5 之前没有 wwwroot 文件夹

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

wwwroot 文件夹是您提供静态文件(例如 css、图像、JavaScript 等)的位置。 bin 文件夹中的文件永远不应提供给客户端(例如浏览器),因此不应进入 wwwroot 文件夹。

Here is some more information 关于wwwroot 应该包含的内容。本质上:

"进入ASP.NET 5中的wwwroot文件夹。wwwroot文件夹代表 在 Web 服务器上运行时 Web 应用程序的实际根目录。静止的 不在 wwwroot 中的文件,例如 appsettings.json 永远无法访问,也无需创建特殊规则 阻止对敏感文件的访问。而不是将访问列入黑名单 敏感文件,采用更安全的白名单方法 只有 wwwroot 文件夹中的文件可以通过网络访问 请求。”

【讨论】:

  • 但是我的 bin 应该在哪里?例如,如果我需要将文件从开发移动到生产,我需要从 bin 移动文件。但是我在项目中找不到 bin。
  • @Michael:你必须使用dnx publish,然后将它的结果部署到IIS并在IIS中创建一个指向wwwroot文件夹的新应用程序
  • 请参考 ASP.NET 文档docs.asp.net/en/latest/publishing/iis.html 获取分步指南
【解决方案2】:

wwwroot/bin 文件夹仅用于包含一个文件AspNet.Loader.dll。 IIS 使用AspNet.Loader.dll 来加载应用程序(位于wwwroot 文件夹之外)。

这样做的原因是提高了安全性。使用 ASP.NET Core 1.0,您无需将应用程序条目指向文件夹(其中包含 ASP.NET 4.5 中的所有 *.cs 文件),而是将其指向应用程序的 wwwroot 文件夹。

现在 IIS 无法访问实际的应用程序文件(并且允许意外访问可能是敏感文件)。因此,AspNet.Loader.dll 是执行您的应用程序所必需的。

除此之外,wwwroot/bin 中没有其他二进制文件,也不应该有其他二进制文件。

更新:

这曾经是 Helios 在 IIS 中运行/托管所必需的。 Helios has been deprecatedbeta8,因为开发两个不同的服务器是没有意义的。因此,对于较新版本的 ASP.NET Core,wwwroot/bin 将始终为空。如果您找到帖子或参考资料,它们很可能是指旧的测试版。

现在 Kestrel、IIS 通过 HttpPlatformhandler(最高 rc1-final 版本和 ASP.NET Core Module 带有 rc2 和更高版本)和通过 HttpListener 的自托管是受支持的运行模式。虽然也可以在 IIS 后面使用 Kestrel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2014-06-18
    • 2020-02-10
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多