在单个 Azure 网站中使用虚拟目录

1 git virtual-directory azure-web-app-service visual-studio-2017

我发现这个答案这篇旧文章一致,但两者都不起作用。因此我来这里是为了询问一个适用于 VS2017 的新解决方案。我将更详细地解释:第一次定义虚拟目录(如“/site1”和物理文件夹“site\site1”)并尝试从 VS2017 发布,您会收到错误(无法写入指定路径)并且无法发布。然后,如果您进入控制台(从 Portal.azure.com)并使用“md site1”在 d:\site 下手动创建文件夹),则发布过程将正常工作(并且已在新文件夹下创建了许多文件)并且以“1 成功...”结束,但是当您浏览到新的 ..../site1 时,您会收到以下错误消息:“由于发生内部服务器错误,无法显示该页面。”

无法在网络上找到任何内容来解决此特定错误(在一份旧文档中,他们说这是由于 2 个项目(在同一解决方案中)的单独 git 存储库造成的,一个针对根文件夹,另一个针对虚拟目录,但我无法理解为什么不同的源代码控制在通过 VS2017 发布时会在生产中造成麻烦)...

有人知道如何解决这个问题吗?

按照 David Ebbo 的要求进行更新:我认为问题是 Azure 端的配置问题(其他文章没有解释在定义虚拟目录时必须通过控制台创建物理文件夹)和/或运行时错误(当物理文件夹是从VS2017作品创建发布流程并成功完成)。

以下是了解上下文的更多详细信息:1) Visual Studio 解决方案包含 2 个项目:一个“主项目”(带有“Hello world!”的空 .NET Core 项目),其发布配置文件针对 Azure 网站的根文件夹 + 另一个“子项目”(标准 MVC Core.NET 模板项目,无需自定义),发布配置文件针对同一 Azure 站点,并将“/site1”添加到“站点名称”和“站点 url”的末尾。2)如果我尝试将子项目发布到网站的根文件夹,一切正常(但当然我覆盖了“主项目”),因此这不是代码/版本问题。3)通过控制台,我可以看到文件夹 d:\home\site\site1 包含与主项目 d:\home\site\wwwroot 中存在的文件“类似”的文件。

Amo*_*mor 6

第一次定义虚拟目录(如“/site1”和物理文件夹“site\site1”)并尝试从 VS2017 发布时,您会收到错误(无法写入指定路径)并且无法发布。

我创建了一个虚拟目录并从 VS 2017 发布了一个 Web 应用程序。我无法重现您的问题。这是我的详细步骤。

步骤 1. 从 Azure 门户创建虚拟目录。请确保您已选中[应用程序]复选框并单击[保存]按钮。

在此输入图像描述

步骤 2. 使用 VS 2017 部署 Web 应用程序。从 VS 部署窗口中搜索并选择应用程序服务。

在此输入图像描述

步骤3. 单击设置按钮配置虚拟目录。

在此输入图像描述

步骤 4. 根据虚拟目录名称更改站点名称和目标 URL。

在此输入图像描述

步骤 5. 单击发布按钮发布 Web 应用程序。

发布我的 Web 应用程序后,我可以从以下 URL 成功查看该 Web 应用程序。

http://mysitename.azurewebsites.net/site1
Run Code Online (Sandbox Code Playgroud)

请检查我的步骤和你的是否有差异。

当您浏览到新的 ..../site1 时,您会收到以下错误消息:“由于发生内部服务器错误,无法显示该页面。”

如果是由您的Web应用程序引起的,我建议您将customErrors模式属性更改为“关闭”以查看详细的错误消息。

<system.web>
    <customErrors mode="Off" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

编辑 2017/6/13 10:37

该问题与 ASP.NET Core 有关。当我发布 ASP.NET Core Web 应用程序时,我可以重现该问题。

我们可以从这个官方文档中找到原因。

将应用程序添加到 IIS 站点的根应用程序时,根应用程序 web.config 文件应包含 部分,该部分将 ASP.NET Core 模块添加为应用程序的处理程序。添加到根应用程序的应用程序不应包含该部分。如果您在子应用程序的 web.config 文件中重复该部分,则当您尝试浏览子应用程序时,您将收到 500.19(内部服务器错误),该错误引用了错误的配置文件。

为了解决这个问题,我们需要编辑该子目录中的web.config文件。我们可以使用 kudu 控制台来做到这一点。单击 web.config 文件前面的编辑​​按钮。

在此输入图像描述

删除 aspNetCore 处理程序并单击“保存”。

在此输入图像描述